Spade
Mini Shell
| Directory:~$ /home/lmsyaran/public_html/joomla4/ |
| [Home] [System Details] [Kill Me] |
PK9e�[
�d��-Application/Admin/AbstractControllerAdmin.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\Controller\Admin\AbstractAdminController;
use Nextend\Framework\Model\StorageSectionManager;
use Nextend\Framework\Platform\Platform;
use Nextend\Framework\Request\Request;
use Nextend\SmartSlider3\Application\Model\ModelSlidersXRef;
use Nextend\SmartSlider3\SmartSlider3Info;
abstract class AbstractControllerAdmin extends AbstractAdminController {
use TraitAdminUrl;
public function initialize() {
parent::initialize();
Js::addFirstCode('window.ss2lang = {};');
require_once dirname(__FILE__) .
'/JavaScriptTranslation.php';
}
public function loadSliderManager() {
$groupID = Request::$REQUEST->getInt('sliderid', 0);
$storage =
StorageSectionManager::getStorage('smartslider');
$options = array(
'userEmail' => Platform::getUserEmail(),
'skipNewsletter' =>
intval($storage->get('free', 'subscribeOnImport'))
|| intval($storage->get('free',
'dismissNewsletterSampleSliders')),
'exportAllUrl' =>
$this->getUrlDashboardExportAll($groupID),
'ajaxUrl' =>
$this->getAjaxUrlSlidesCreate(),
'previewUrl' =>
$this->getUrlPreviewIndex(0),
'importUrl' =>
$this->getUrlImport($groupID)
);
Js::addInline("new _N2.ManageSliders('" . $groupID .
"', " . json_encode($options) . ", " .
json_encode(SmartSlider3Info::shouldSkipLicenseModal()) . ");");
}
public function redirectToSliders() {
$this->redirect($this->getUrlDashboard());
}
/**
* @param int $sliderID
*
* @return bool
*/
protected function getGroupData($sliderID) {
$groupID = Request::$REQUEST->getInt('groupID');
$xref = new ModelSlidersXRef($this);
$groups = $xref->getGroups($sliderID,
'published');
$currentGroup = false;
foreach ($groups as $group) {
if ($group['group_id'] == $groupID) {
$currentGroup = $group;
break;
}
}
if ($currentGroup === false) {
$currentGroup = $groups[0];
}
return $currentGroup;
}
}PK9e�[}T���*Application/Admin/ApplicationTypeAdmin.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin;
use Exception;
use Nextend\Framework\Application\AbstractApplicationType;
use Nextend\Framework\Asset\Css\Css;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\Browse\ControllerAjaxBrowse;
use Nextend\Framework\Content\ControllerAjaxContent;
use Nextend\Framework\Font\ControllerAjaxFont;
use Nextend\Framework\Image\ControllerAjaxImage;
use Nextend\Framework\Image\Image;
use Nextend\Framework\Platform\Platform;
use Nextend\Framework\Router\Router;
use Nextend\Framework\Style\ControllerAjaxStyle;
use
Nextend\SmartSlider3\Application\Admin\Generator\ControllerAjaxGenerator;
use Nextend\SmartSlider3\Application\Admin\Generator\ControllerGenerator;
use Nextend\SmartSlider3\Application\Admin\GoPro\ControllerGoPro;
use Nextend\SmartSlider3\Application\Admin\Help\ControllerHelp;
use Nextend\SmartSlider3\Application\Admin\Layout\AbstractLayoutMenu;
use Nextend\SmartSlider3\Application\Admin\Preview\ControllerPreview;
use Nextend\SmartSlider3\Application\Admin\Settings\ControllerAjaxSettings;
use Nextend\SmartSlider3\Application\Admin\Settings\ControllerSettings;
use Nextend\SmartSlider3\Application\Admin\Slider\ControllerAjaxSlider;
use Nextend\SmartSlider3\Application\Admin\Slider\ControllerSlider;
use Nextend\SmartSlider3\Application\Admin\Sliders\ControllerAjaxSliders;
use Nextend\SmartSlider3\Application\Admin\Sliders\ControllerSliders;
use Nextend\SmartSlider3\Application\Admin\Slides\ControllerAjaxSlides;
use Nextend\SmartSlider3\Application\Admin\Slides\ControllerSlides;
use Nextend\SmartSlider3\Application\Admin\Update\ControllerUpdate;
use Nextend\SmartSlider3\Application\Admin\Visuals\ControllerAjaxCss;
use
Nextend\SmartSlider3\BackgroundAnimation\ControllerAjaxBackgroundAnimation;
use Nextend\SmartSlider3\Platform\Joomla\JoomlaShim;
use Nextend\SmartSlider3\Platform\SmartSlider3Platform;
use Nextend\SmartSlider3\SmartSlider3Info;
class ApplicationTypeAdmin extends AbstractApplicationType {
use TraitAdminUrl;
protected $key = 'admin';
protected function createRouter() {
$this->router = new Router(SmartSlider3Platform::getAdminUrl(),
SmartSlider3Platform::getAdminAjaxUrl(),
SmartSlider3Platform::getNetworkAdminUrl());
}
public function setLayout($layout) {
parent::setLayout($layout);
if ($this->layout instanceof AbstractLayoutMenu) {
$this->layout->addBreadcrumb(n2_('Dashboard'),
'ssi_16 ssi_16--dashboard', $this->getUrlDashboard());
}
Js::addGlobalInline("window.N2SS3VERSION='" .
SmartSlider3Info::$version . "';");
}
protected function getControllerSliders() {
return new ControllerSliders($this);
}
protected function getControllerAjaxSliders() {
return new ControllerAjaxSliders($this);
}
protected function getControllerSlider() {
return new ControllerSlider($this);
}
protected function getControllerAjaxSlider() {
return new ControllerAjaxSlider($this);
}
protected function getControllerSlides() {
return new ControllerSlides($this);
}
protected function getControllerAjaxSlides() {
return new ControllerAjaxSlides($this);
}
protected function getControllerGenerator() {
return new ControllerGenerator($this);
}
protected function getControllerAjaxGenerator() {
return new ControllerAjaxGenerator($this);
}
protected function getControllerPreview() {
return new ControllerPreview($this);
}
protected function getControllerSettings() {
return new ControllerSettings($this);
}
protected function getControllerAjaxSettings() {
return new ControllerAjaxSettings($this);
}
protected function getControllerHelp() {
return new ControllerHelp($this);
}
protected function getControllerGoPro() {
return new ControllerGoPro($this);
}
protected function getControllerAjaxBackgroundAnimation() {
return new ControllerAjaxBackgroundAnimation($this);
}
protected function getControllerAjaxFont() {
return new ControllerAjaxFont($this);
}
protected function getControllerAjaxStyle() {
return new ControllerAjaxStyle($this);
}
protected function getControllerAjaxCss() {
return new ControllerAjaxCss($this);
}
protected function getControllerAjaxImage() {
return new ControllerAjaxImage($this);
}
protected function getControllerAjaxContent() {
return new ControllerAjaxContent($this);
}
protected function getControllerUpdate() {
return new ControllerUpdate($this);
}
protected function getControllerAjaxBrowse() {
return new ControllerAjaxBrowse($this);
}
protected function getDefaultController($controllerName, $ajax = false)
{
if ($controllerName !== 'sliders') {
return $this->getControllerSliders();
}
throw new Exception('Missing default controller for
application type.');
}
public function enqueueAssets() {
Js::addInline('_N2.AjaxHelper.addAdminUrl(' .
json_encode($this->getKey()) . ', ' .
json_encode($this->createAjaxUrl('/')) . ');');
JS::addInline('_N2.BrowserCompatibility(' .
json_encode($this->getUrlHelpBrowserIncompatible()) . ');');
parent::enqueueAssets();
if (Platform::isAdmin()) {
Js::addGlobalInline('window.N2SS3C="' .
SmartSlider3Info::$campaign . '";');
}
Js::addGlobalInline('window.N2Joomla4=' .
JoomlaShim::$isJoomla4 . ';');
Image::enqueueHelper();
static $once;
if ($once != null) {
return;
}
$once = true;
$path = self::getAssetsPath();
Css::addStaticGroup($path .
'/dist/smartslider-admin.min.css',
'smartslider-admin');
Js::addStaticGroup($path .
'/dist/smartslider-backend.min.js',
'smartslider-backend');
}
}PK9e�[�ҽII2Application/Admin/FormManager/FormManagerSlide.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\FormManager;
use Nextend\Framework\Form\AbstractFormManager;
use Nextend\Framework\Form\Element\Hidden;
use Nextend\Framework\Form\Form;
use Nextend\Framework\Pattern\MVCHelperTrait;
use Nextend\SmartSlider3\Application\Admin\TraitAdminUrl;
use Nextend\SmartSlider3\Slider\Slider;
class FormManagerSlide extends AbstractFormManager {
use TraitAdminUrl;
protected $data;
/**
* @var int
*/
protected $groupID;
/** @var Slider */
private $slider;
private $slide;
/**
* @var Form
*/
protected $form;
/**
* FormManagerSlide constructor.
*
* @param MVCHelperTrait $MVCHelper
* @param int $groupID
* @param Slider $slider
* @param $slide
*/
public function __construct($MVCHelper, $groupID, $slider, $slide) {
$this->groupID = $groupID;
$this->slider = $slider;
$this->slide = $slide;
parent::__construct($MVCHelper);
$params = json_decode($slide['params'], true);
if ($params == null) $params = array();
$params += $slide;
$params['sliderid'] = $slide['slider'];
$params['generator_id'] =
$slide['generator_id'];
$params['first'] = isset($slide['first']) ?
$slide['first'] : 0;
$this->data = $params;
$this->initForm();
}
public function render() {
$this->form->render();
}
private function initForm() {
$this->form = new Form($this, 'slide');
if (!empty($this->data['guides'])) {
$this->form->set('guides',
$this->data['guides']);
}
$hidden = $this->form->getFieldsetHidden();
new Hidden($hidden, 'slide', '');
new Hidden($hidden, 'guides', '');
}
}PK9e�[��p\TT3Application/Admin/FormManager/FormManagerSlider.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\FormManager;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\Font\FontManager;
use Nextend\Framework\Form\AbstractFormManager;
use Nextend\Framework\Form\Element\Hidden;
use Nextend\Framework\Form\FormTabbed;
use Nextend\Framework\Pattern\MVCHelperTrait;
use Nextend\Framework\Style\StyleManager;
use
Nextend\SmartSlider3\Application\Admin\FormManager\Slider\SliderAnimations;
use
Nextend\SmartSlider3\Application\Admin\FormManager\Slider\SliderAutoplay;
use
Nextend\SmartSlider3\Application\Admin\FormManager\Slider\SliderControls;
use
Nextend\SmartSlider3\Application\Admin\FormManager\Slider\SliderDeveloper;
use
Nextend\SmartSlider3\Application\Admin\FormManager\Slider\SliderGeneral;
use
Nextend\SmartSlider3\Application\Admin\FormManager\Slider\SliderOptimize;
use Nextend\SmartSlider3\Application\Admin\FormManager\Slider\SliderSize;
use Nextend\SmartSlider3\Application\Admin\FormManager\Slider\SliderSlides;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\Header\BlockHeader;
use Nextend\SmartSlider3\Application\Admin\TraitAdminUrl;
use Nextend\SmartSlider3\BackgroundAnimation\BackgroundAnimationManager;
use Nextend\SmartSlider3\Slider\SliderParams;
use Nextend\SmartSlider3\Slider\SliderType\AbstractSliderTypeAdmin;
use Nextend\SmartSlider3\Slider\SliderType\SliderTypeFactory;
use
Nextend\SmartSlider3Pro\PostBackgroundAnimation\PostBackgroundAnimationManager;
class FormManagerSlider extends AbstractFormManager {
use TraitAdminUrl;
protected $slider;
protected $data;
/**
* @var FormTabbed
*/
protected $form;
/**
* @var AbstractSliderTypeAdmin
*/
protected $sliderType;
/**
* FormManagerSlider constructor.
*
* @param MVCHelperTrait $MVCHelper
* @param $slider
*/
public function __construct($MVCHelper, $slider) {
parent::__construct($MVCHelper);
$this->slider = $slider;
$sliderParams = new SliderParams($slider['id'],
$slider['type'], $slider['params'], true);
$data = $sliderParams->toArray();
$data['title'] = $slider['title'];
$data['type'] = $slider['type'];
$data['thumbnail'] = $slider['thumbnail'];
$data['alias'] = isset($slider['alias']) ?
$slider['alias'] : '';
$this->data = $data;
$this->initForm();
}
public function render() {
$this->form->render();
}
/**
* @return array|mixed|object
*/
public function getData() {
return $this->data;
}
/**
* @param BlockHeader $blockHeader
*/
public function addTabsToHeader($blockHeader) {
$this->form->addTabsToHeader($blockHeader);
}
/**
* @return AbstractSliderTypeAdmin
*/
public function getSliderType() {
return $this->sliderType;
}
private function initForm() {
FontManager::enqueue($this);
StyleManager::enqueue($this);
// Background animations are required for simple type. We need to
load the lightbox, because it is not working over AJAX slider type change.
BackgroundAnimationManager::enqueue($this);
PostBackgroundAnimationManager::enqueue($this);
$this->form = new FormTabbed($this, 'slider');
$this->form->setSessionID('slider-' .
$this->slider['id']);
$this->form->set('sliderID',
$this->slider['id']);
$this->form->set('class',
'nextend-smart-slider-admin');
$this->form->loadArray($this->data);
$this->initSliderType();
new SliderGeneral($this, $this->form);
new SliderSize($this->form);
new SliderControls($this->form);
new SliderAnimations($this->form);
new SliderAutoplay($this->form);
new SliderOptimize($this->form);
new SliderSlides($this->form);
new SliderDeveloper($this->form);
$this->sliderType->prepareForm($this->form);
}
private function initSliderType() {
new Hidden($this->form->getFieldsetHidden(),
'type', 'simple');
$availableTypes = SliderTypeFactory::getAdminTypes();
$sliderType = $this->form->get('type',
'simple');
if (!isset($availableTypes[$sliderType])) {
$sliderType = 'simple';
}
$this->sliderType = $availableTypes[$sliderType];
$types = array();
foreach ($availableTypes as $type) {
if (!$type->isDepreciated() || $type->getName() ==
$sliderType) {
$types[$type->getName()] = array(
'icon' => $type->getIcon(),
'label' => $type->getLabel()
);
}
}
JS::addInline('new _N2.SliderChangeType(' .
json_encode(array(
'types' => $types,
'currentType' => $sliderType,
'ajaxUrl' =>
$this->form->createAjaxUrl(array(
"slider/changeSliderType",
array(
'sliderID' =>
$this->form->get('sliderID')
)
))
)) . ');');
}
}PK9e�[��N��:Application/Admin/FormManager/Slider/AbstractSliderTab.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\FormManager\Slider;
use Nextend\Framework\Form\Container\ContainerTab;
use Nextend\Framework\Form\FormTabbed;
abstract class AbstractSliderTab {
/**
* @var FormTabbed
*/
protected $form;
/**
* @var ContainerTab
*/
protected $tab;
/**
* AbstractSliderTab constructor.
*
* @param FormTabbed $form
*/
public function __construct($form) {
$this->form = $form;
$this->tab = $form->createTab($this->getName(),
$this->getLabel());
}
/**
* @return string
*/
abstract protected function getName();
/**
* @return string
*/
abstract protected function getLabel();
}PK9e�[k�
��9Application/Admin/FormManager/Slider/SliderAnimations.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\FormManager\Slider;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\FormTabbed;
use Nextend\SmartSlider3Pro\Form\Element\Particle;
use Nextend\SmartSlider3Pro\Form\Element\ShapeDivider;
class SliderAnimations extends AbstractSliderTab {
/**
* SliderAnimations constructor.
*
* @param FormTabbed $form
*/
public function __construct($form) {
parent::__construct($form);
$this->effects();
$this->layerAnimations();
$this->layerParallax();
}
/**
* @return string
*/
protected function getName() {
return 'animations';
}
/**
* @return string
*/
protected function getLabel() {
return n2_('Animations');
}
protected function effects() {
/**
* Used for field injection: /animations/effects
* Used for field removal: /animations/effects
*/
$table = new ContainerTable($this->tab, 'effects',
n2_('Effects'));
/**
* Used for field injection: /animations/effects/effects-row1
*/
$row = $table->createRow('effects-row1');
new ShapeDivider($row, 'shape-divider', n2_('Shape
divider'));
new Particle($row, 'particle', n2_('Particle
effect'));
}
protected function layerAnimations() {
$table = new ContainerTable($this->tab,
'layer-animations', n2_('Layer animations'));
$row = $table->createRow('layer-animations');
new OnOff($row, 'playfirstlayer', n2_('Play on
load'), 1, array(
'tipLabel' => n2_('Play on load'),
'tipDescription' => n2_('Plays the layer
animations on the first slide when it appears for the first time.')
));
/**
* Used for field removal:
/animations/layer-animations/layer-animations/playonce
*/
new OnOff($row, 'playonce', n2_('Play once'),
0, array(
'tipLabel' => n2_('Play once'),
'tipDescription' => n2_('Plays the layer
animations only during the first loop.')
));
new Select($row, 'layer-animation-play-in',
n2_('Play on'), 'end', array(
'options' => array(
'start' => n2_('Main animation
start'),
'end' => n2_('Main animation end')
)
));
new Select($row, 'layer-animation-play-mode',
n2_('Mode'), 'skippable', array(
'options' => array(
'skippable' => n2_('Skippable'),
'forced' => n2_('Forced')
),
'tipLabel' => n2_('Mode'),
'tipDescription' => n2_('You can make the
outgoing layer animations, which don\'t have events, to play on slide
switching.'),
));
}
protected function layerParallax() {
/**
* Used for field removal: /animations/layer-parallax
*/
$table = new ContainerTable($this->tab,
'layer-parallax', n2_('Layer parallax'));
new OnOff($table->getFieldsetLabel(),
'parallax-enabled', n2_('Enable'), 1, array(
'relatedFieldsOn' => array(
'table-rows-layer-parallax'
)
));
$row = $table->createRow('layer-parallax');
new OnOff($row, 'parallax-enabled-mobile',
n2_('Mobile'), 0);
new OnOff($row, 'parallax-3d', '3D', 0);
new OnOff($row, 'parallax-animate',
n2_('Animate'), 1);
new Select($row, 'parallax-horizontal',
n2_('Horizontal'), 'mouse', array(
'options' => array(
'0' => n2_('Off'),
'mouse' => n2_('Mouse'),
'mouse-invert' => n2_('Mouse') .
' - ' . n2_('Invert')
)
));
new Select($row, 'parallax-vertical',
n2_('Vertical'), 'mouse', array(
'options' => array(
'0' => n2_('Off'),
'scroll' => n2_('Scroll'),
'scroll-invert' => n2_('Scroll') .
' - ' . n2_('Invert'),
'mouse' => n2_('Mouse'),
'mouse-invert' => n2_('Mouse') .
' - ' . n2_('Invert')
)
));
new Select($row, 'parallax-mouse-origin', n2_('Mouse
origin'), 'slider', array(
'options' => array(
'slider' => n2_('Slider center'),
'enter' => n2_('Mouse enter
position')
)
));
new Select($row, 'parallax-scroll-move', n2_('Scroll
move'), 'both', array(
'options' => array(
'both' => n2_('Both'),
'bottom' => n2_('To bottom'),
'top' => n2_('To top')
)
));
}
}PK9e�[x���
�
7Application/Admin/FormManager/Slider/SliderAutoplay.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\FormManager\Slider;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Text\Number;
use Nextend\Framework\Form\FormTabbed;
use Nextend\SmartSlider3\Widget\WidgetGroupFactory;
use Nextend\SmartSlider3Pro\Form\Element\AutoplayPicker;
class SliderAutoplay extends AbstractSliderTab {
/**
* SliderAutoplay constructor.
*
* @param FormTabbed $form
*/
public function __construct($form) {
parent::__construct($form);
$this->autoplay();
$plugins = WidgetGroupFactory::getGroups();
if (isset($plugins['autoplay'])) {
$plugins['autoplay']->renderFields($this->tab);
}
if (isset($plugins['indicator'])) {
$plugins['indicator']->renderFields($this->tab);
}
}
/**
* @return string
*/
protected function getName() {
return 'autoplay';
}
/**
* @return string
*/
protected function getLabel() {
return n2_('Autoplay');
}
protected function autoplay() {
$table = new ContainerTable($this->tab, 'autoplay',
n2_('Autoplay'));
new OnOff($table->getFieldsetLabel(), 'autoplay',
n2_('Enable'), 0, array(
'relatedAttribute' => 'autoplay',
'relatedFieldsOn' => array(
'table-rows-autoplay',
'table-widget-autoplay',
'table-widget-indicator'
)
));
$row2 = $table->createRow('row-2');
new Number($row2, 'autoplayDuration', n2_('Slide
duration'), 8000, array(
'wide' => 5,
'unit' => 'ms'
));
new OnOff($row2, 'autoplayStart',
n2_('Autostart'), 1);
new OnOff($row2, 'autoplayAllowReStart', n2_('Allow
restart'), 0, array(
'tipLabel' => n2_('Allow
restart'),
'tipDescription' => n2_('Keeps the autoplay
control visible after the autoplay has finished to allow starting it
again.')
));
$rowFinish = $table->createRow('row-finish');
new OnOff($rowFinish, 'autoplayLoop', n2_('Infinite
loop'), 1, array(
'relatedFieldsOff' => array(
'sliderautoplayfinish',
'sliderautoplayAllowReStart'
)
));
/**
* Used for field injection:
/autoplay/autoplay/row-finish/autoplayfinish
*/
new AutoplayPicker($rowFinish, 'autoplayfinish',
n2_('Finish autoplay'), '1|*|loop|*|current');
$row3 = $table->createRow('row-3');
new OnOff($row3, 'autoplayStopClick', n2_('Stop on
click'), 1);
new Select($row3, 'autoplayStopMouse', n2_('Stop on
mouse'), 0, array(
'options' => array(
'0' => n2_('Off'),
'enter' => n2_('Enter'),
'leave' => n2_('Leave')
)
));
new OnOff($row3, 'autoplayStopMedia', n2_('Stop on
media'), 1);
$row4 = $table->createRow('row-4');
new OnOff($row4, 'autoplayResumeClick', n2_('Resume
on click'), 0);
new Select($row4, 'autoplayResumeMouse', n2_('Resume
on mouse'), 0, array(
'options' => array(
'0' => n2_('Off'),
'leave' => n2_('Leave'),
'enter' => n2_('Enter')
)
));
new OnOff($row4, 'autoplayResumeMedia', n2_('Resume
on media'), 1);
}
}PK9e�[,�c�:
:
7Application/Admin/FormManager/Slider/SliderControls.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\FormManager\Slider;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\FormTabbed;
use Nextend\Framework\Pattern\OrderableTrait;
use Nextend\SmartSlider3\Widget\WidgetGroupFactory;
class SliderControls extends AbstractSliderTab {
/**
* SliderControls constructor.
*
* @param FormTabbed $form
*/
public function __construct($form) {
parent::__construct($form);
$this->general();
$this->controls();
}
/**
* @return string
*/
protected function getName() {
return 'controls';
}
/**
* @return string
*/
protected function getLabel() {
return n2_('Controls');
}
protected function general() {
/**
* Used for field removal: /controls/general
*/
$table = new ContainerTable($this->tab, 'general',
n2_('General'));
$row1 = $table->createRow('general-1');
new Select($row1, 'controlsTouch', n2_('Drag'),
'horizontal', array(
'options' => array(
'0' => n2_('Disabled'),
'horizontal' => n2_('Horizontal'),
'vertical' => n2_('Vertical')
),
'tipLabel' => n2_('Drag'),
'tipDescription' => n2_('Defines the drag
(and touch) direction for your slider.')
));
new Select($row1, 'controlsScroll', n2_('Mouse
wheel'), '0', array(
'options' => array(
'0' => n2_('Disabled'),
'1' => n2_('Vertical'),
'2' => n2_('Horizontal')
),
'tipLabel' => n2_('Mouse wheel'),
'tipDescription' => n2_('Allows switching
slides with the mouse wheel.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1778-slider-settings-controls#mouse-wheel'
));
new OnOff($row1, 'controlsKeyboard',
n2_('Keyboard'), 1, array(
'tipLabel' => n2_('Keyboard'),
'tipDescription' => n2_('Allows switching
slides with the keyboard.')
));
}
protected function controls() {
$plugins = WidgetGroupFactory::getGroups();
OrderableTrait::uasort($plugins);
unset($plugins['autoplay']);
unset($plugins['indicator']);
foreach ($plugins as $name => $widgetGroup) {
$widgetGroup->renderFields($this->tab);
}
}
}PK9e�[8֨�8Application/Admin/FormManager/Slider/SliderDeveloper.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\FormManager\Slider;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\Message\Warning;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Element\Textarea;
use Nextend\Framework\Form\FormTabbed;
class SliderDeveloper extends AbstractSliderTab {
/**
* SliderDeveloper constructor.
*
* @param FormTabbed $form
*/
public function __construct($form) {
parent::__construct($form);
$this->developer();
}
/**
* @return string
*/
protected function getName() {
return 'developer';
}
/**
* @return string
*/
protected function getLabel() {
return n2_('Developer');
}
protected function developer() {
$table = new ContainerTable($this->tab, 'developer',
n2_('Developer'));
$row1 = $table->createRow('developer-1');
new OnOff($row1, 'blockrightclick', n2_('Block right
click'), 0);
/**
* Used for field removal:
/developer/developer/developer-1/controlsBlockCarouselInteraction
*/
new OnOff($row1, 'controlsBlockCarouselInteraction',
n2_('Block carousel'), 1, array(
'tipLabel' => n2_('Block
carousel'),
'tipDescription' => n2_('Stops the carousel
at the last slide when the source of interaction is vertical touch,
vertical pointer, mouse wheel or vertical keyboard.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1806-slider-settings-developer#block-carousel'
));
new OnOff($row1, 'clear-both', n2_('Clear
before'), 1, array(
'tipLabel' => n2_('Clear before'),
'tipDescription' => n2_('Closes the unclosed
float CSS codes before the slider.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1806-slider-settings-developer#clear-before'
));
new OnOff($row1, 'clear-both-after', n2_('Clear
after'), 1, array(
'tipLabel' => n2_('Clear after'),
'tipDescription' => n2_('Allows you to put
your slider next to your text.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1806-slider-settings-developer#clear-after'
));
$rowHideScrollbar =
$table->createRow('developer-hide-scrollbar');
new OnOff($rowHideScrollbar, 'overflow-hidden-page',
n2_('Hide scrollbar'), 0, array(
'relatedFieldsOn' => array(
'slideroverflow-hidden-page-notice'
)
));
new Warning($rowHideScrollbar,
'overflow-hidden-page-notice', n2_('Your website won\'t
be scrollable anymore! All out of screen elements will be hidden.'));
$row2 = $table->createRow('developer-2');
new OnOff($row2, 'responsiveFocusUser', n2_('Scroll
to slider'), 1, array(
'tipLabel' => n2_('Scroll to
slider'),
'tipDescription' => n2_('The page scrolls
back to the slider when the user interacts with it.'),
'relatedFieldsOn' => array(
'sliderresponsiveFocusEdge'
)
));
new Select($row2, 'responsiveFocusEdge',
n2_('Edge'), 'auto', array(
'options' => array(
'auto' => n2_('Auto'),
'top' => n2_('Top - when
needed'),
'top-force' => n2_('Top -
always'),
'bottom' => n2_('Bottom - when
needed'),
'bottom-force' => n2_('Bottom -
always'),
)
));
$row21 = $table->createRow('developer-21');
new OnOff($row21, 'is-delayed', n2_('Delayed (for
lightbox/tabs)'), 0, array(
'tipLabel' => n2_('Delayed (for
lightbox/tabs)'),
'tipDescription' => n2_('Delays the loading
of the slider until its container gets visible. Useful when you display the
slider in a lightbox or tab.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1801-slider-settings-optimize#delayed-for-lightboxtabs'
));
$row211 = $table->createRow('developer-211');
new OnOff($row211, 'legacy-font-scale', n2_('Legacy
font scale'), 0, array(
'relatedFieldsOn' => array(
'sliderlegacy-font-scale-notice'
)
));
new Warning($row211, 'legacy-font-scale-notice',
n2_('This feature brings back the non-adaptive font size for absolute
layers which were made before version 3.5. Turning on can affect website
performance, so we suggest to keep it disabled.
'));
$row22 = $table->createRow('developer-22');
new Text($row22, 'classes', n2_('Slider CSS
classes'), '', array(
'tipLabel' => n2_('Slider CSS
classes'),
'tipDescription' => n2_('You can put custom
CSS classes to the slider\'s container.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1806-slider-settings-developer#css'
));
$row3 = $table->createRow('developer-3');
new Textarea($row3, 'custom-css-codes', 'CSS',
'', array(
'height' => 26,
'resize' => 'both'
));
$row4 = $table->createRow('developer-4');
new Textarea($row4, 'callbacks', n2_('JavaScript
callbacks'), '', array(
'height' => 26,
'resize' => 'both'
));
}
}PK9e�[S��
6Application/Admin/FormManager/Slider/SliderGeneral.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\FormManager\Slider;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\MarginPadding;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Element\Text\FieldImage;
use Nextend\Framework\Form\Element\Text\Number;
use Nextend\Framework\Form\Element\Text\NumberAutoComplete;
use Nextend\Framework\Form\Fieldset\FieldsetRowPlain;
use Nextend\Framework\Form\FormTabbed;
use Nextend\SmartSlider3\Application\Admin\FormManager\FormManagerSlider;
use Nextend\SmartSlider3\Form\Element\PublishSlider;
class SliderGeneral extends AbstractSliderTab {
/**
* @var FormManagerSlider
*/
protected $manager;
/**
* SliderGeneral constructor.
*
* @param FormManagerSlider $manager
* @param FormTabbed $form
*/
public function __construct($manager, $form) {
$this->manager = $manager;
parent::__construct($form);
$this->publish();
$this->general();
$this->alias();
$this->sliderDesign();
}
/**
* @return string
*/
protected function getName() {
return 'general';
}
/**
* @return string
*/
protected function getLabel() {
return n2_('General');
}
protected function publish() {
$table = new ContainerTable($this->tab, 'publish',
n2_('Publish'));
$row = new FieldsetRowPlain($table, 'publish');
new PublishSlider($row);
}
protected function general() {
$table = new ContainerTable($this->tab, 'general',
n2_('General') . ' - ' .
$this->manager->getSliderType()
->getLabelFull());
$row1 = $table->createRow('general-1');
new Text($row1, 'title', n2_('Name'),
n2_('Slider'), array(
'style' => 'width:300px;'
));
new FieldImage($row1, 'thumbnail',
n2_('Thumbnail'), '', array(
'tipLabel' => n2_('Thumbnail'),
'tipDescription' => n2_('Slider thumbnail
which appears in the slider list.')
));
new Text($row1, 'aria-label', n2_('ARIA
label'), '', array(
'style' => 'width:200px;',
'tipLabel' => n2_('ARIA label'),
'tipDescription' => n2_('It allows you to
label your slider for screen readers.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1722-slider-settings-general#aria-label'
));
}
protected function alias() {
$table = new ContainerTable($this->tab, 'alias',
n2_('Alias'));
$row1 = $table->createRow('alias-1');
new Text($row1, 'alias', n2_('Alias'),
'', array(
'style' => 'width:200px;',
'tipLabel' => n2_('Alias'),
'tipDescription' => n2_('You can use this
alias in the slider\'s shortcode.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1722-slider-settings-general#alias'
));
new OnOff($row1, 'alias-id', n2_('Use as
anchor'), '', array(
'tipLabel' => n2_('Use as
anchor'),
'tipDescription' => n2_('Creates an empty
div before the slider, using the alias as the ID of this div. As a result,
you can use #your-alias in the URL to make the page jump to the
slider.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1722-slider-settings-general#use-as-anchor',
'relatedFieldsOn' => array(
'slideralias-smoothscroll',
'slideralias-slideswitch'
)
));
new OnOff($row1, 'alias-smoothscroll', n2_('Smooth
scroll'), '', array(
'tipLabel' => n2_('Smooth
scroll'),
'tipDescription' => n2_('The #your-alias urls
in links would be forced to smooth scroll to the slider.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1722-slider-settings-general#smooth-scroll-to-this-element'
));
/**
* Used for field removal: /general/alias/alias-1/alias-slideswitch
*/
new OnOff($row1, 'alias-slideswitch', n2_('Switch
slide'), '', array(
'tipLabel' => n2_('Switch
slide'),
'tipDescription' => n2_('Use #your-alias-2
as an anchor to jump to the slider and switch to the 2nd slide immediately.
Use #your-alias-3 for the 3rd slide and so on.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1722-slider-settings-general#allow-slide-switching-for-anchor',
'relatedFieldsOn' => array(
'slideralias-slideswitch-scroll'
)
));
new OnOff($row1, 'alias-slideswitch-scroll',
n2_('Scroll to slide'), 1, array(
'tipLabel' => n2_('Scroll to
slide'),
'tipDescription' => n2_('The "Switch
slide" option won\'t scroll you to the slider. Only the slides
will switch.')
));
}
protected function sliderDesign() {
$table = new ContainerTable($this->tab, 'design',
n2_('Slider design'));
$rowBackground =
$table->createRow('slider-type-simple-settings-background');
new FieldImage($rowBackground, 'background',
n2_('Slider background image'), '', array(
'width' => '200',
'relatedFields' => array(
'table-optimize-slider',
'sliderbackground-fixed',
'sliderbackground-size'
)
));
new OnOff($rowBackground, 'background-fixed',
n2_('Fixed'), 0);
new Text\TextAutoComplete($rowBackground,
'background-size', n2_('Size'), 'cover',
array(
'values' => array(
'cover',
'contain',
'auto'
)
));
new Text\Color($rowBackground, 'background-color',
n2_('Background color'), 'FFFFFF00', array(
'alpha' => true
));
new Text\Video($rowBackground, 'backgroundVideoMp4',
n2_('Background video'), '', array(
'relatedFields' => array(
'sliderbackgroundVideoMuted',
'sliderbackgroundVideoLoop',
'sliderbackgroundVideoMode'
)
));
new OnOff($rowBackground, 'backgroundVideoMuted',
n2_('Muted'), 1);
new OnOff($rowBackground, 'backgroundVideoLoop',
n2_x('Loop', 'Video/Audio play'), 1);
new Select($rowBackground, 'backgroundVideoMode',
n2_('Fill mode'), 'fill', array(
'options' => array(
'fill' => n2_('Fill'),
'fit' => n2_('Fit'),
'center' => n2_('Center')
)
));
/**
* Used for field injection: /general/design/design-1
*/
$row1 = $table->createRow('design-1');
new Select($row1, 'align', n2_('Align'),
'normal', array(
'options' => array(
'normal' => n2_('Normal'),
'left' => n2_('Left'),
'center' => n2_('Center'),
'right' => n2_('Right')
)
));
/**
* Used for field injection: /general/design/design-1/margin
*/
$margin = new MarginPadding($row1, 'margin',
n2_('Margin'), '0|*|0|*|0|*|0', array(
'unit' => 'px',
'tipLabel' => n2_('Margin'),
'tipDescription' => n2_('Puts a fix margin
around your slider.')
));
for ($i = 1; $i < 5; $i++) {
new Number($margin, 'col-border-width-' . $i, false,
'', array(
'wide' => 3
));
}
new NumberAutoComplete($row1, 'perspective',
n2_('Perspective'), 1000, array(
'wide' => 5,
'values' => array(
0,
500,
1000,
1500,
2000,
3000
),
'unit' => 'px'
));
}
}PK9e�[:;���0�07Application/Admin/FormManager/Slider/SliderOptimize.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\FormManager\Slider;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\Grouping;
use Nextend\Framework\Form\Element\Message\Warning;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Text\Number;
use Nextend\Framework\Form\FormTabbed;
class SliderOptimize extends AbstractSliderTab {
/**
* SliderOptimize constructor.
*
* @param FormTabbed $form
*/
public function __construct($form) {
parent::__construct($form);
$this->loading();
$this->optimizeSlide();
$this->optimizeLayer();
$this->optimizeSliderBackgroundImage();
$this->other();
}
/**
* @return string
*/
protected function getName() {
return 'optimize';
}
/**
* @return string
*/
protected function getLabel() {
return n2_('Optimize');
}
protected function loading() {
$table = new ContainerTable($this->tab, 'loading',
n2_('Loading'));
$row1 = $table->createRow('loading-1');
new Select($row1, 'loading-type', 'Loading
type', '', array(
'options' => array(
'' => n2_('Instant'),
'afterOnLoad' => n2_('After page
loaded'),
'afterDelay' => n2_('After delay')
),
'relatedValueFields' => array(
array(
'values' => array(
'afterDelay'
),
'field' => array(
'sliderdelay'
)
)
),
'tipLabel' => n2_('Loading
type'),
'tipDescription' => n2_('If your slider
is above the fold, you can load it immediately. Otherwise, you can load it
only after the page has loaded.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1801-slider-settings-optimize#loading-type'
));
new Number($row1, 'delay', n2_('Load delay'),
0, array(
'wide' => 5,
'unit' => 'ms'
));
new OnOff($row1, 'playWhenVisible', n2_('Play when
visible'), 1, array(
'relatedFieldsOn' => array(
'sliderplayWhenVisibleAt'
),
'tipLabel' => n2_('Play when
visible'),
'tipDescription' => n2_('Makes sure that the
autoplay and layer animations only start when your slider is
visible.')
));
new Number($row1, 'playWhenVisibleAt',
n2_('At'), 50, array(
'unit' => '%',
'wide' => 3
));
}
protected function optimizeSlide() {
$table = new ContainerTable($this->tab,
'optimize-slide', n2_('Slide background images'));
/**
* Used for field injection:
/optimize/optimize-slide/optimize-slide-loading-mode
*/
$row1 =
$table->createRow('optimize-slide-loading-mode');
new Select($row1, 'imageload', n2_('Loading
mode'), '0', array(
'options' => array(
'0' => n2_('Normal'),
'2' => n2_('Delayed loading'),
'1' => n2_('Lazy loading')
),
'relatedValueFields' => array(
array(
'values' => array(
'1'
),
'field' => array(
'sliderimageloadNeighborSlides'
)
)
),
'tipLabel' => n2_('Loading
mode'),
'tipDescription' => n2_('You can speed up
your site\'s loading by delaying the slide background images.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1801-slider-settings-optimize#lazy-load'
));
/**
* Used for field injection:
/optimize/optimize-slide/optimize-slide-loading-mode/imageloadNeighborSlides
*/
new Number($row1, 'imageloadNeighborSlides',
n2_('Load neighbor'), 0, array(
'unit' => n2_x('slides',
'Unit'),
'wide' => 3
));
$row2 = $table->createRow('optimize-slide-2');
$memoryLimitText = '';
if (function_exists('ini_get')) {
$memory_limit = ini_get('memory_limit');
if (!empty($memory_limit)) {
$memoryLimitText = ' (' . $memory_limit .
')';
}
}
new Warning($row2, 'optimize-notice',
sprintf(n2_('Convert to WebP and image resizing require a lot of
memory. Lift the memory limit%s if you get a blank page.'),
$memoryLimitText));
$row3 = $table->createRow('optimize-slide-3');
new OnOff($row3, 'optimize-webp', n2_('Convert to
WebP'), '0', array(
'relatedFieldsOn' => array(
'slideroptimize-slide-webp',
'slideroptimize-quality'
)
));
$optimizeWebp = new Grouping($row3,
'optimize-slide-webp');
new Number($optimizeWebp, 'optimize-quality',
n2_('Quality'), 70, array(
'min' => 0,
'max' => 100,
'unit' => '%',
'wide' => 3,
'post' => 'break'
));
new OnOff($optimizeWebp, 'optimize-scale',
n2_('Resize'), '0', array(
'relatedFieldsOn' => array(
'slideroptimize-slide-width-normal',
'slideroptimize-slide-width-tablet',
'slideroptimize-slide-height-tablet',
'slideroptimize-slide-width-mobile',
'slideroptimize-slide-height-mobile',
'slideroptimize-slide-width-retina'
)
));
new Number($optimizeWebp, 'optimize-slide-width-normal',
n2_('Default width'), 1920, array(
'min' => 0,
'unit' => 'px',
'wide' => 4
));
new Number($optimizeWebp, 'optimize-slide-width-tablet',
n2_('Medium width'), 1200, array(
'min' => 0,
'unit' => 'px',
'wide' => 4
));
new Number($optimizeWebp, 'optimize-slide-height-tablet',
n2_('Medium height'), 0, array(
'min' => 0,
'unit' => 'px',
'wide' => 4
));
new Number($optimizeWebp, 'optimize-slide-width-mobile',
n2_('Small width'), 500, array(
'min' => 0,
'unit' => 'px',
'wide' => 4
));
new Number($optimizeWebp, 'optimize-slide-height-mobile',
n2_('Small height'), 0, array(
'min' => 0,
'unit' => 'px',
'wide' => 4
));
new OnOff($optimizeWebp, 'optimize-slide-width-retina',
n2_('Retina'), 0);
$row4 = $table->createRow('optimize-slide-4');
new OnOff($row4, 'optimize-thumbnail-scale',
n2_('Resize Thumbnail'), '0', array(
'relatedFieldsOn' => array(
'slideroptimize-thumbnail-quality',
'slideroptimizeThumbnailWidth',
'slideroptimizeThumbnailHeight'
)
));
new Number($row4, 'optimize-thumbnail-quality',
n2_('Thumbnail Quality'), 70, array(
'min' => 0,
'max' => 100,
'unit' => '%',
'wide' => 3,
'post' => 'break'
));
new Number($row4, 'optimizeThumbnailWidth',
n2_('Thumbnail width'), 100, array(
'min' => 0,
'unit' => 'px',
'wide' => 4
));
new Number($row4, 'optimizeThumbnailHeight',
n2_('Thumbnail height'), 60, array(
'min' => 0,
'unit' => 'px',
'wide' => 4
));
}
protected function optimizeLayer() {
$table = new ContainerTable($this->tab,
'optimize-layer', n2_('Layer images'));
$row1 = $table->createRow('optimize-layer-1');
new OnOff($row1, 'layer-image-webp', n2_('Convert to
WebP'), '0', array(
'relatedFieldsOn' => array(
'sliderlayer-image-optimize-webp'
)
));
$optimizeWebp = new Grouping($row1,
'layer-image-optimize-webp');
new Number($optimizeWebp, 'layer-image-optimize-quality',
n2_('Quality'), 70, array(
'min' => 0,
'max' => 100,
'unit' => '%',
'wide' => 3,
'post' => 'break'
));
new OnOff($optimizeWebp, 'layer-image-optimize',
n2_('Resize'), '0', array(
'relatedFieldsOn' => array(
'sliderlayer-image-width-normal',
'sliderlayer-image-width-tablet',
'sliderlayer-image-width-mobile',
'sliderlayer-image-width-retina'
)
));
new Number($optimizeWebp, 'layer-image-width-normal',
n2_('Default width'), 1400, array(
'unit' => 'px',
'wide' => 4
));
new Number($optimizeWebp, 'layer-image-width-tablet',
n2_('Medium width'), 800, array(
'unit' => 'px',
'wide' => 4
));
new Number($optimizeWebp, 'layer-image-width-mobile',
n2_('Small width'), 425, array(
'unit' => 'px',
'wide' => 4
));
new OnOff($optimizeWebp, 'layer-image-width-retina',
n2_('Retina'), 0);
$row2 = $table->createRow('optimize-layer-2');
new OnOff($row2, 'layer-image-base64', 'Base64
embed', '0', array(
'relatedFieldsOn' => array(
'sliderlayer-image-base64-size'
),
'tipLabel' => n2_('Base64
embed'),
'tipDescription' => n2_('Embeds the layer
images to the page source, reducing the requests.')
));
new Number($row2, 'layer-image-base64-size',
n2_('Max file size'), 50, array(
'min' => 0,
'unit' => 'kb',
'wide' => 5
));
}
protected function optimizeSliderBackgroundImage() {
$table = new ContainerTable($this->tab,
'optimize-slider', n2_('Slider background image'));
$row1 = $table->createRow('optimize-slider-1');
new OnOff($row1, 'optimize-slider-webp',
n2_('Convert to WebP'), '0', array(
'relatedFieldsOn' => array(
'slideroptimize-slider-webp-group',
'slideroptimize-slider-quality'
)
));
$optimizeWebp = new Grouping($row1,
'optimize-slider-webp-group');
new Number($optimizeWebp, 'optimize-slider-quality',
n2_('Quality'), 70, array(
'min' => 0,
'max' => 100,
'unit' => '%',
'wide' => 3,
'post' => 'break'
));
new OnOff($optimizeWebp, 'optimize-slider-scale',
n2_('Resize'), '0', array(
'relatedFieldsOn' => array(
'slideroptimize-slider-width-normal',
'slideroptimize-slider-width-tablet',
'slideroptimize-slider-height-tablet',
'slideroptimize-slider-width-mobile',
'slideroptimize-slider-height-mobile',
)
));
new Number($optimizeWebp, 'optimize-slider-width-normal',
n2_('Default width'), 1920, array(
'min' => 0,
'unit' => 'px',
'wide' => 4
));
new Number($optimizeWebp, 'optimize-slider-width-tablet',
n2_('Medium width'), 1200, array(
'min' => 0,
'unit' => 'px',
'wide' => 4
));
new Number($optimizeWebp,
'optimize-slider-height-tablet', n2_('Medium height'),
0, array(
'min' => 0,
'unit' => 'px',
'wide' => 4
));
new Number($optimizeWebp, 'optimize-slider-width-mobile',
n2_('Small width'), 500, array(
'min' => 0,
'unit' => 'px',
'wide' => 4
));
new Number($optimizeWebp,
'optimize-slider-height-mobile', n2_('Small height'),
0, array(
'min' => 0,
'unit' => 'px',
'wide' => 4
));
}
protected function other() {
$table = new ContainerTable($this->tab,
'optimize-other', n2_('Other'));
$row1 = $table->createRow('optimize-other-1');
new OnOff($row1, 'slides-background-video-mobile',
n2_('Background video on mobile'), 1);
}
}PK9e�[d���9S9S3Application/Admin/FormManager/Slider/SliderSize.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\FormManager\Slider;
use Nextend\Framework\Form\Container\ContainerRowGroup;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\Breakpoint;
use Nextend\Framework\Form\Element\CheckboxOnOff;
use Nextend\Framework\Form\Element\Group\GroupCheckboxOnOff;
use Nextend\Framework\Form\Element\Grouping;
use Nextend\Framework\Form\Element\Hidden\HiddenOnOff;
use Nextend\Framework\Form\Element\Message\Notice;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Text\HiddenText;
use Nextend\Framework\Form\Element\Text\Number;
use Nextend\Framework\Form\Element\Text\NumberAutoComplete;
use Nextend\Framework\Form\FormTabbed;
use Nextend\SmartSlider3\Application\Admin\Settings\ViewSettingsGeneral;
use Nextend\SmartSlider3\Form\Element\Select\ResponsiveSubFormIcon;
use Nextend\SmartSlider3\Settings;
class SliderSize extends AbstractSliderTab {
/**
* SliderSize constructor.
*
* @param FormTabbed $form
*/
public function __construct($form) {
parent::__construct($form);
$this->size();
$this->breakpoints();
$this->layout();
$this->customSize();
}
/**
* @return string
*/
protected function getName() {
return 'size';
}
/**
* @return string
*/
protected function getLabel() {
return n2_('Size');
}
protected function size() {
$table = new ContainerTable($this->tab, 'size',
n2_('Slider size'));
/**
* Used for field injection: /size/size/size-1
*/
$row1 = $table->createRow('size-1');
new NumberAutoComplete($row1, 'width',
n2_('Width'), 900, array(
'wide' => 5,
'min' => 10,
'values' => array(
1920,
1400,
1000,
800,
600,
400
),
'unit' => 'px'
));
new NumberAutoComplete($row1, 'height',
n2_('Height'), 500, array(
'wide' => 5,
'min' => 10,
'values' => array(
800,
600,
500,
400,
300,
200
),
'unit' => 'px'
));
$groupShowOn = new GroupCheckboxOnOff($row1, 'show-on',
n2_('Hide on'));
new CheckboxOnOff($groupShowOn, 'mobileportrait', false,
'ssi_16 ssi_16--mobileportrait', 1, array(
'invert' => true,
'checkboxTip' => n2_('Mobile')
));
new CheckboxOnOff($groupShowOn, 'mobilelandscape', false,
'ssi_16 ssi_16--mobileportraitlarge', 1, array(
'invert' => true,
'checkboxTip' => n2_('Large mobile'),
'rowClass' =>
'n2-slider-settings-require--mobilelandscape'
));
new CheckboxOnOff($groupShowOn, 'tabletportrait', false,
'ssi_16 ssi_16--tabletportrait', 1, array(
'invert' => true,
'checkboxTip' => n2_('Tablet')
));
new CheckboxOnOff($groupShowOn, 'tabletlandscape', false,
'ssi_16 ssi_16--tabletportraitlarge', 1, array(
'invert' => true,
'checkboxTip' => n2_('Large tablet'),
'rowClass' =>
'n2-slider-settings-require--tabletlandscape'
));
new CheckboxOnOff($groupShowOn, 'desktopportrait', false,
'ssi_16 ssi_16--desktopportrait', 1, array(
'invert' => true,
'checkboxTip' => n2_('Desktop')
));
new CheckboxOnOff($groupShowOn, 'desktoplandscape',
false, 'ssi_16 ssi_16--desktoplandscape', 1, array(
'invert' => true,
'checkboxTip' => n2_('Large desktop'),
'rowClass' =>
'n2-slider-settings-require--desktoplandscape'
));
/**
* Used for field removal: /size/size/size-2
*/
$row2 = $table->createRow('size-2');
new OnOff($row2, 'responsiveLimitSlideWidth',
n2_('Limit slide width'), 1, array(
'relatedFieldsOn' => array(
'slidergrouping-responsive-slide-width'
),
'tipLabel' => n2_('Limit slide
width'),
'tipDescription' => n2_('Limits the width of
the slide and prevents the slider from getting too tall.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1774-slider-settings-size#limit-slide-width'
));
$slideMaxWidthGroup = new Grouping($row2,
'grouping-responsive-slide-width');
$slideMaxWidthGroupDesktopLandscape = new
Grouping($slideMaxWidthGroup,
'grouping-responsive-slide-width-desktop-landscape');
new OnOff($slideMaxWidthGroupDesktopLandscape,
'responsiveSlideWidthDesktopLandscape', n2_('Large
desktop'), 0, array(
'relatedFieldsOn' => array(
'sliderresponsiveSlideWidthMaxDesktopLandscape'
)
));
new NumberAutoComplete($slideMaxWidthGroupDesktopLandscape,
'responsiveSlideWidthMaxDesktopLandscape', n2_('Max'),
1600, array(
'min' => 0,
'values' => array(
3000,
1600
),
'unit' => 'px',
'wide' => 5
));
new OnOff($slideMaxWidthGroup, 'responsiveSlideWidth',
n2_('Desktop'), 0, array(
'relatedFieldsOn' => array(
'sliderresponsiveSlideWidthMax'
)
));
new NumberAutoComplete($slideMaxWidthGroup,
'responsiveSlideWidthMax', n2_('Max'), 3000, array(
'min' => 0,
'values' => array(
3000,
980
),
'unit' => 'px',
'wide' => 5
));
$slideMaxWidthGroupTabletLandscape = new
Grouping($slideMaxWidthGroup,
'grouping-responsive-slide-width-tablet-landscape');
new OnOff($slideMaxWidthGroupTabletLandscape,
'responsiveSlideWidthTabletLandscape', n2_('Large
tablet'), 0, array(
'relatedFieldsOn' => array(
'sliderresponsiveSlideWidthMaxTabletLandscape'
)
));
new NumberAutoComplete($slideMaxWidthGroupTabletLandscape,
'responsiveSlideWidthMaxTabletLandscape', n2_('Max'),
1200, array(
'min' => 0,
'values' => array(
3000,
1200
),
'unit' => 'px',
'wide' => 5
));
new OnOff($slideMaxWidthGroup,
'responsiveSlideWidthTablet', n2_('Tablet'), 0, array(
'relatedFieldsOn' => array(
'sliderresponsiveSlideWidthMaxTablet'
)
));
new NumberAutoComplete($slideMaxWidthGroup,
'responsiveSlideWidthMaxTablet', n2_('Max'), 3000,
array(
'min' => 0,
'values' => array(
3000,
980
),
'unit' => 'px',
'wide' => 5
));
$slideMaxWidthGroupMobileLandscape = new
Grouping($slideMaxWidthGroup,
'grouping-responsive-slide-width-mobile-landscape');
new OnOff($slideMaxWidthGroupMobileLandscape,
'responsiveSlideWidthMobileLandscape', n2_('Large
mobile'), 0, array(
'relatedFieldsOn' => array(
'sliderresponsiveSlideWidthMaxMobileLandscape'
)
));
new NumberAutoComplete($slideMaxWidthGroupMobileLandscape,
'responsiveSlideWidthMaxMobileLandscape', n2_('Max'),
740, array(
'min' => 0,
'values' => array(
3000,
740
),
'unit' => 'px',
'wide' => 5
));
new OnOff($slideMaxWidthGroup,
'responsiveSlideWidthMobile', n2_('Mobile'), 0, array(
'relatedFieldsOn' => array(
'sliderresponsiveSlideWidthMaxMobile'
)
));
new NumberAutoComplete($slideMaxWidthGroup,
'responsiveSlideWidthMaxMobile', n2_('Max'), 480,
array(
'min' => 0,
'values' => array(
3000,
480
),
'unit' => 'px',
'wide' => 5
));
}
protected function breakpoints() {
$table = new ContainerTable($this->tab, 'breakpoints',
n2_('Breakpoints'));
$tableFieldset = $table->getFieldsetLabel();
new HiddenText($tableFieldset,
'responsive-breakpoint-desktop-portrait', false,
ViewSettingsGeneral::defaults['desktop-large-portrait']);
new HiddenText($tableFieldset,
'responsive-breakpoint-desktop-portrait-landscape', false,
ViewSettingsGeneral::defaults['desktop-large-landscape']);
new HiddenText($tableFieldset,
'responsive-breakpoint-tablet-landscape', false,
ViewSettingsGeneral::defaults['tablet-large-portrait']);
new HiddenText($tableFieldset,
'responsive-breakpoint-tablet-landscape-landscape', false,
ViewSettingsGeneral::defaults['tablet-large-landscape']);
new HiddenText($tableFieldset,
'responsive-breakpoint-tablet-portrait', false,
ViewSettingsGeneral::defaults['tablet-portrait']);
new HiddenText($tableFieldset,
'responsive-breakpoint-tablet-portrait-landscape', false,
ViewSettingsGeneral::defaults['tablet-landscape']);
new HiddenText($tableFieldset,
'responsive-breakpoint-mobile-landscape', false,
ViewSettingsGeneral::defaults['mobile-large-portrait']);
new HiddenText($tableFieldset,
'responsive-breakpoint-mobile-landscape-landscape', false,
ViewSettingsGeneral::defaults['mobile-large-landscape']);
new HiddenText($tableFieldset,
'responsive-breakpoint-mobile-portrait', false,
ViewSettingsGeneral::defaults['mobile-portrait']);
new HiddenText($tableFieldset,
'responsive-breakpoint-mobile-portrait-landscape', false,
ViewSettingsGeneral::defaults['mobile-landscape']);
new HiddenOnOff($tableFieldset,
'responsive-breakpoint-desktop-landscape-enabled',
n2_('Large desktop'), 0, array(
'relatedFieldsOn' => array(
'sliderresponsive-breakpoint-notice-desktop-landscape',
'table-row-override-slider-size-desktop-landscape-row',
'slidergrouping-responsive-slide-width-desktop-landscape'
)
));
new HiddenOnOff($tableFieldset,
'responsive-breakpoint-tablet-landscape-enabled', n2_('Large
tablet'), 0, array(
'relatedFieldsOn' => array(
'sliderresponsive-breakpoint-notice-tablet-landscape',
'table-row-override-slider-size-tablet-landscape-row',
'slidergrouping-responsive-slide-width-tablet-landscape'
)
));
new HiddenOnOff($tableFieldset,
'responsive-breakpoint-tablet-portrait-enabled',
n2_('Tablet'), 1, array(
'relatedFieldsOn' => array(
'sliderresponsive-breakpoint-notice-tablet-portrait',
'table-row-override-slider-size-tablet-portrait-row'
)
));
new HiddenOnOff($tableFieldset,
'responsive-breakpoint-mobile-landscape-enabled', n2_('Large
mobile'), 0, array(
'relatedFieldsOn' => array(
'sliderresponsive-breakpoint-notice-mobile-landscape',
'table-row-override-slider-size-mobile-landscape-row',
'slidergrouping-responsive-slide-width-mobile-landscape'
)
));
new HiddenOnOff($tableFieldset,
'responsive-breakpoint-mobile-portrait-enabled',
n2_('Mobile'), 1, array(
'relatedFieldsOn' => array(
'sliderresponsive-breakpoint-notice-mobile-portrait',
'table-row-override-slider-size-mobile-portrait-row'
)
));
$row1 = $table->createRow('breakpoints-row-1');
$instructions = n2_('Breakpoints define the browser width in
pixel when the slider switches to a different device.');
new Notice($row1, 'breakpoints-instructions',
n2_('Instruction'), $instructions);
$row2 = $table->createRow('breakpoints-row-2');
new OnOff($row2, 'responsive-breakpoint-global',
n2_('Global breakpoints'), 0, array(
'tipLabel' => n2_('Global
breakpoints'),
'tipDescription' => sprintf(n2_('You can use
the global breakpoints, or adjust them locally here. You can configure the
Global breakpoints at <a href="%1$s"
target="_blank">Global settings</a> > General >
Breakpoints'), $this->form->getMVCHelper()
->getUrlSettingsDefault())
));
new Breakpoint($row2, 'breakpoints', array(
'desktoplandscape-portrait' =>
'sliderresponsive-breakpoint-desktop-portrait',
'desktoplandscape-landscape' =>
'sliderresponsive-breakpoint-desktop-portrait-landscape',
'tabletlandscape-portrait' =>
'sliderresponsive-breakpoint-tablet-landscape',
'tabletlandscape-landscape' =>
'sliderresponsive-breakpoint-tablet-landscape-landscape',
'tabletportrait-portrait' =>
'sliderresponsive-breakpoint-tablet-portrait',
'tabletportrait-landscape' =>
'sliderresponsive-breakpoint-tablet-portrait-landscape',
'mobilelandscape-portrait' =>
'sliderresponsive-breakpoint-mobile-landscape',
'mobilelandscape-landscape' =>
'sliderresponsive-breakpoint-mobile-landscape-landscape',
'mobileportrait-portrait' =>
'sliderresponsive-breakpoint-mobile-portrait',
'mobileportrait-landscape' =>
'sliderresponsive-breakpoint-mobile-portrait-landscape'
), array(
'desktoplandscape' =>
'sliderresponsive-breakpoint-desktop-landscape-enabled',
'tabletlandscape' =>
'sliderresponsive-breakpoint-tablet-landscape-enabled',
'mobilelandscape' =>
'sliderresponsive-breakpoint-mobile-landscape-enabled'
), array(
'field' =>
'sliderresponsive-breakpoint-global',
'values' => array(
'desktoplandscape-portrait' =>
Settings::get('responsive-screen-width-desktop-portrait',
ViewSettingsGeneral::defaults['desktop-large-portrait']),
'desktoplandscape-landscape' =>
Settings::get('responsive-screen-width-desktop-portrait-landscape',
ViewSettingsGeneral::defaults['desktop-large-landscape']),
'tabletlandscape-portrait' =>
Settings::get('responsive-screen-width-tablet-landscape',
ViewSettingsGeneral::defaults['tablet-large-portrait']),
'tabletlandscape-landscape' =>
Settings::get('responsive-screen-width-tablet-landscape-landscape',
ViewSettingsGeneral::defaults['tablet-large-landscape']),
'tabletportrait-portrait' =>
Settings::get('responsive-screen-width-tablet-portrait',
ViewSettingsGeneral::defaults['tablet-portrait']),
'tabletportrait-landscape' =>
Settings::get('responsive-screen-width-tablet-portrait-landscape',
ViewSettingsGeneral::defaults['tablet-landscape']),
'mobilelandscape-portrait' =>
Settings::get('responsive-screen-width-mobile-landscape',
ViewSettingsGeneral::defaults['mobile-large-portrait']),
'mobilelandscape-landscape' =>
Settings::get('responsive-screen-width-mobile-landscape-landscape',
ViewSettingsGeneral::defaults['mobile-large-landscape']),
'mobileportrait-portrait' =>
Settings::get('responsive-screen-width-mobile-portrait',
ViewSettingsGeneral::defaults['mobile-portrait']),
'mobileportrait-landscape' =>
Settings::get('responsive-screen-width-mobile-portrait-landscape',
ViewSettingsGeneral::defaults['mobile-landscape'])
)
));
}
protected function layout() {
$table = new ContainerTable($this->tab,
'responsive-mode', n2_('Layout'));
$row1 = $table->createRow('responsive-mode-row-1');
/**
* Used for option removal:
/size/responsive-mode/responsive-mode-row-1/responsive-mode
*/
new ResponsiveSubFormIcon($row1, 'responsive-mode',
$table,
$this->form->createAjaxUrl(array("slider/renderresponsivetype")),
'auto');
}
protected function customSize() {
$table = new ContainerTable($this->tab,
'override-slider-size', n2_('Custom size'));
new OnOff($table->getFieldsetLabel(),
'slider-size-override', '', 0, array(
'relatedFieldsOn' => array(
'table-row-group-override-slider-size'
)
));
$row1 = $table->createRow('size-1');
$instructions = sprintf(n2_('Use this option to customize the
aspect ratio for each device. %1$s Read more in the documentation%2$s.
<b>Beware:</b> This option is rarely needed and might be hard
to set properly!'), '<a
href="https://smartslider.helpscoutdocs.com/article/1774-slider-settings-size#custom-size"
target="_blank">', '</a>');
new Notice($row1, 'instructions',
n2_('Instruction'), $instructions);
$overrideEditorSize =
$table->createRowGroup('override-slider-size', false);
$this->mobilePortrait($overrideEditorSize);
$this->mobileLandscape($overrideEditorSize);
$this->tabletPortrait($overrideEditorSize);
$this->tabletLandscape($overrideEditorSize);
$this->desktopLandscape($overrideEditorSize);
}
/**
* @param ContainerRowGroup $rowGroup
*/
protected function desktopLandscape($rowGroup) {
$row =
$rowGroup->createRow('override-slider-size-desktop-landscape-row');
new OnOff($row, 'slider-size-override-desktop-landscape',
n2_('Large desktop'), 0, array(
'relatedFieldsOn' => array(
'sliderdesktop-landscape-width',
'sliderdesktop-landscape-height'
)
));
new Number($row, 'desktop-landscape-width',
n2_('Width'), 1440, array(
'wide' => 5,
'unit' => 'px'
));
new Number($row, 'desktop-landscape-height',
n2_('Height'), 900, array(
'wide' => 5,
'unit' => 'px'
));
}
/**
* @param ContainerRowGroup $rowGroup
*/
protected function tabletLandscape($rowGroup) {
$row =
$rowGroup->createRow('override-slider-size-tablet-landscape-row');
new OnOff($row, 'slider-size-override-tablet-landscape',
n2_('Large tablet'), 0, array(
'relatedFieldsOn' => array(
'slidertablet-landscape-width',
'slidertablet-landscape-height'
)
));
new Number($row, 'tablet-landscape-width',
n2_('Width'), 1024, array(
'wide' => 5,
'unit' => 'px'
));
new Number($row, 'tablet-landscape-height',
n2_('Height'), 768, array(
'wide' => 5,
'unit' => 'px'
));
}
/**
* @param ContainerRowGroup $rowGroup
*/
protected function tabletPortrait($rowGroup) {
$row =
$rowGroup->createRow('override-slider-size-tablet-portrait-row');
new OnOff($row, 'slider-size-override-tablet-portrait',
n2_('Tablet'), 0, array(
'relatedFieldsOn' => array(
'slidertablet-portrait-width',
'slidertablet-portrait-height'
)
));
new Number($row, 'tablet-portrait-width',
n2_('Width'), 768, array(
'wide' => 5,
'unit' => 'px'
));
new Number($row, 'tablet-portrait-height',
n2_('Height'), 1024, array(
'wide' => 5,
'unit' => 'px'
));
}
/**
* @param ContainerRowGroup $rowGroup
*/
protected function mobileLandscape($rowGroup) {
$row =
$rowGroup->createRow('override-slider-size-mobile-landscape-row');
new OnOff($row, 'slider-size-override-mobile-landscape',
n2_('Large mobile'), 0, array(
'relatedFieldsOn' => array(
'slidermobile-landscape-width',
'slidermobile-landscape-height'
)
));
new Number($row, 'mobile-landscape-width',
n2_('Width'), 568, array(
'wide' => 5,
'unit' => 'px'
));
new Number($row, 'mobile-landscape-height',
n2_('Height'), 320, array(
'wide' => 5,
'unit' => 'px'
));
}
/**
* @param ContainerRowGroup $rowGroup
*/
protected function mobilePortrait($rowGroup) {
$row =
$rowGroup->createRow('override-slider-size-mobile-portrait-row');
new OnOff($row, 'slider-size-override-mobile-portrait',
n2_('Mobile'), 0, array(
'relatedFieldsOn' => array(
'slidermobile-portrait-width',
'slidermobile-portrait-height'
)
));
new Number($row, 'mobile-portrait-width',
n2_('Width'), 320, array(
'wide' => 5,
'unit' => 'px'
));
new Number($row, 'mobile-portrait-height',
n2_('Height'), 568, array(
'wide' => 5,
'unit' => 'px'
));
}
}PK9e�[2����5Application/Admin/FormManager/Slider/SliderSlides.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\FormManager\Slider;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Text\Number;
use Nextend\Framework\Form\FormTabbed;
class SliderSlides extends AbstractSliderTab {
/**
* SliderSlides constructor.
*
* @param FormTabbed $form
*/
public function __construct($form) {
parent::__construct($form);
$this->design();
$this->slides();
$this->parallax();
}
/**
* @return string
*/
protected function getName() {
return 'slides';
}
/**
* @return string
*/
protected function getLabel() {
return n2_('Slides');
}
protected function design() {
$table = new ContainerTable($this->tab,
'slides-design', n2_('Slides design'));
/**
* Used for field injection: /slides/slides-design/slides-design-1
*/
$row1 = $table->createRow('slides-design-1');
/**
* Used for field injection:
/slides/slides-design/slides-design-1/backgroundMode
*/
new Select\FillMode($row1, 'backgroundMode',
n2_('Slide background image fill'), 'fill', array(
'tipLabel' => n2_('Slide background
image fill'),
'tipDescription' => n2_('If the size of your
image is not the same as your slider\'s, you can improve the result
with the filling modes.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1809-slider-settings-slides#slide-background-image-fill'
));
}
protected function slides() {
/**
* Used for field removal: /slides/slides-randomize
*/
$table = new ContainerTable($this->tab,
'slides-randomize', n2_('Randomize'));
$row1 = $table->createRow('slides-randomize-1');
new OnOff($row1, 'randomize', n2_('Randomize
slides'), 0);
new OnOff($row1, 'randomizeFirst', n2_('Randomize
first'), 0);
new OnOff($row1, 'randomize-cache', n2_('Cache
support'), 1);
new Number($row1, 'variations', n2_('Cache
variations'), 5, array(
'wide' => 5
));
/**
* Used for field removal: /slides/other
*/
$table = new ContainerTable($this->tab, 'other',
n2_('Other'));
$row2 = $table->createRow('other-1');
new OnOff($row2, 'reverse-slides',
n2_('Reverse'), 0, array(
'tipLabel' => n2_('Reverse'),
'tipDescription' => n2_('You can make your
slides appear in the slider in a reversed order.')
));
new Number($row2, 'maximumslidecount', n2_('Max
count'), 1000, array(
'wide' => 4,
'tipLabel' => n2_('Max count'),
'tipDescription' => n2_('You can limit how
many slides you want to show from your slider. It\'s best used with
the Randomize feature, to improve the experience.')
));
new OnOff($row2, 'maintain-session', n2_('Maintain
session'), 0, array(
'tipLabel' => n2_('Maintain
session'),
'tipDescription' => n2_('The slider continues
from the last viewed slide when the visitor comes back to the page.')
));
$row3 = $table->createRow('slides-2');
new OnOff($row3, 'global-lightbox', n2_('Backgrounds
in lightbox'), 0, array(
'tipLabel' => n2_('Backgrounds in
lightbox'),
'tipDescription' => n2_('Creates a lightbox
from your slide background images. This feature only works if all slides
have background images.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1809-slider-settings-slides#backgrounds-in-lightbox',
'relatedFieldsOn' => array(
'sliderglobal-lightbox-label'
)
));
new Select($row3, 'global-lightbox-label', n2_('Show
label'), '0', array(
'options' => array(
'0' => n2_('No'),
'name' => n2_('Only slide
name'),
'namemore' => n2_('Slide name and
description')
)
));
}
protected function parallax() {
/**
* Used for field removal: /slides/slides-parallax
*/
$table = new ContainerTable($this->tab,
'slides-parallax', n2_('Background parallax'));
new OnOff($table->getFieldsetLabel(),
'slide-background-parallax', false, 0, array(
'relatedFieldsOn' => array(
'table-rows-slides-parallax'
)
));
$row1 = $table->createRow('slides-parallax-1');
new Select($row1, 'slide-background-parallax-strength',
n2_('Strength'), 50, array(
'options' => array(
10 => n2_('Super soft') . ' 10%',
30 => n2_('Soft') . ' 30%',
50 => n2_('Normal') . ' 50%',
75 => n2_('Strong') . ' 75%',
100 => n2_('Super strong') . ' 100%'
)
));
new OnOff($row1, 'bg-parallax-tablet',
n2_('Tablet'), 0);
new OnOff($row1, 'bg-parallax-mobile',
n2_('Mobile'), 0);
}
}PK9e�[;��Kww7Application/Admin/Generator/ControllerAjaxGenerator.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Generator;
use Exception;
use Nextend\Framework\Controller\Admin\AdminAjaxController;
use Nextend\Framework\Data\Data;
use Nextend\Framework\Notification\Notification;
use Nextend\Framework\Request\Request;
use Nextend\SmartSlider3\Application\Admin\TraitAdminUrl;
use Nextend\SmartSlider3\Application\Helper\HelperSliderChanged;
use Nextend\SmartSlider3\Application\Model\ModelGenerator;
use Nextend\SmartSlider3\Application\Model\ModelSlides;
class ControllerAjaxGenerator extends AdminAjaxController {
use TraitAdminUrl;
public function actionCheckConfiguration() {
$this->validateToken();
$this->validatePermission('smartslider_config');
$group = Request::$REQUEST->getVar('group');
$this->validateVariable($group, 'group');
$sliderID = Request::$REQUEST->getVar('sliderid');
$this->validateVariable($sliderID, 'sliderid');
$groupID = Request::$REQUEST->getInt('groupID');
$generatorModel = new ModelGenerator($this);
$generatorGroup = $generatorModel->getGeneratorGroup($group);
$configuration = $generatorGroup->getConfiguration();
$configuration->addData(Request::$POST->getVar('generator'));
if ($configuration->wellConfigured()) {
$this->redirect($this->getUrlGeneratorCreateStep2($group,
$sliderID, $groupID));
} else {
$this->response->redirect($this->getUrlGeneratorCheckConfiguration($group,
$sliderID, $groupID));
}
}
public function actionCreateSettings() {
$this->validateToken();
$this->validatePermission('smartslider_edit');
$group = Request::$REQUEST->getVar('group');
$this->validateVariable($group, 'group');
$type = Request::$REQUEST->getVar('type');
$this->validateVariable($type, 'type');
$sliderID = Request::$REQUEST->getVar('sliderid');
$this->validateVariable($sliderID, 'sliderid');
$groupID = Request::$REQUEST->getInt('groupID');
$generatorModel = new ModelGenerator($this);
$result = $generatorModel->createGenerator($sliderID,
Request::$REQUEST->getVar('generator'));
Notification::success(n2_('Generator created.'));
$this->response->redirect($this->getUrlSlideEdit($result['slideId'],
$sliderID, $groupID));
}
public function actionEdit() {
$this->validateToken();
$this->validatePermission('smartslider_edit');
$generatorId =
Request::$REQUEST->getInt('generator_id');
$this->validateVariable($generatorId, 'generatorId');
$groupID = Request::$REQUEST->getInt('groupID');
$generatorModel = new ModelGenerator($this);
$generator = $generatorModel->get($generatorId);
$this->validateDatabase($generator);
$slidesModel = new ModelSlides($this);
$slides = $slidesModel->getAll(-1, 'OR generator_id =
' . $generator['id'] . '');
if (count($slides) > 0) {
$slide = $slides[0];
$request = new
Data(Request::$REQUEST->getVar('generator'));
$slideParams = new Data($slide['params'], true);
$slideParams->set('record-slides',
$request->get('record-slides', 1));
$slidesModel->updateSlideParams($slide['id'],
$slideParams->toArray());
$request->un_set('record-slides');
$generatorModel->save($generatorId, $request->toArray());
$helper = new HelperSliderChanged($this);
$helper->setSliderChanged($slide['slider'], 1);
Notification::success(n2_('Generator updated and cache
cleared.'));
$this->response->respond();
}
}
public function actionRecordsTable() {
$this->validateToken();
$this->validatePermission('smartslider_edit');
$generatorID =
Request::$REQUEST->getInt('generator_id');
$generatorModel = new ModelGenerator($this);
if ($generatorID > 0) {
$generator = $generatorModel->get($generatorID);
$this->validateDatabase($generator);
} else {
$info = new
Data(Request::$REQUEST->getVar('generator'));
$generator = array(
'group' => $info->get('group'),
'type' => $info->get('type'),
'params' => '{}'
);
}
$generatorGroup =
$generatorModel->getGeneratorGroup($generator['group']);
if (!$generatorGroup) {
Notification::notice(n2_('Generator group not
found'));
$this->response->error();
}
$generatorSource =
$generatorGroup->getSource($generator['type']);
if (!$generatorSource) {
Notification::notice(n2_('Generator source not
found'));
$this->response->error();
}
$generator['params'] = new
Data($generator['params'], true);
$generator['params']->loadArray(Request::$REQUEST->getVar('generator'));
$generatorSource->setData($generator['params']);
$request = new
Data(Request::$REQUEST->getVar('generator'));
$group = max(intval($request->get('record-group', 1)),
1);
$result =
$generatorSource->getData(max($request->get('record-slides',
1), 1), max($request->get('record-start', 1), 1), $group);
if (empty($result)) {
Notification::notice(n2_('No records found for the
filter'));
$this->response->respond(null);
}
$view = new ViewAjaxGeneratorRecordsTable($this);
$view->setRecordGroup($group);
$view->setRecords($result);
$this->response->respond($view->display());
}
public function actionGetAuthUrl() {
$this->validateToken();
$this->validatePermission('smartslider_config');
$group = Request::$REQUEST->getVar('group');
$generatorModel = new ModelGenerator($this);
$generatorGroup = $generatorModel->getGeneratorGroup($group);
try {
$configuration = $generatorGroup->getConfiguration();
$this->response->respond(array('authUrl' =>
$configuration->startAuth($this)));
} catch (Exception $e) {
Notification::error($e->getMessage());
$this->response->error();
}
}
public function actionGetData() {
$this->validateToken();
$this->validatePermission('smartslider_edit');
$group = Request::$REQUEST->getVar('group');
$generatorModel = new ModelGenerator($this);
$generatorGroup = $generatorModel->getGeneratorGroup($group);
try {
$configuration = $generatorGroup->getConfiguration();
$this->response->respond(call_user_func(array(
$configuration,
Request::$REQUEST->getCmd('method')
)));
} catch (Exception $e) {
Notification::error($e->getMessage());
$this->response->error();
}
}
}PK9e�[�[c$|!|!3Application/Admin/Generator/ControllerGenerator.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Generator;
use Exception;
use Nextend\Framework\Notification\Notification;
use Nextend\Framework\PageFlow;
use Nextend\Framework\Request\Request;
use Nextend\SmartSlider3\Application\Admin\AbstractControllerAdmin;
use Nextend\SmartSlider3\Application\Model\ModelGenerator;
use Nextend\SmartSlider3\Application\Model\ModelSliders;
use Nextend\SmartSlider3\Application\Model\ModelSlides;
use Nextend\SmartSlider3\Generator\GeneratorFactory;
class ControllerGenerator extends AbstractControllerAdmin {
public function actionCreate() {
if ($this->validatePermission('smartslider_edit')) {
$sliderID =
Request::$REQUEST->getInt("sliderid", 0);
$slidersModel = new ModelSliders($this);
$slider = $slidersModel->get($sliderID);
if ($this->validateDatabase($slider)) {
$groupData = $this->getGroupData($sliderID);
$view = new ViewGeneratorCreateStep1Groups($this);
$view->setGroupData($groupData['group_id'],
$groupData['title']);
$view->setSlider($slider);
$view->display();
}
}
}
public function actionCreateStep2() {
if ($this->validatePermission('smartslider_edit')) {
$sliderID =
Request::$REQUEST->getInt("sliderid", 0);
$slidersModel = new ModelSliders($this);
$slider = $slidersModel->get($sliderID);
if ($this->validateDatabase($slider)) {
$groupData = $this->getGroupData($sliderID);
$generatorGroup =
GeneratorFactory::getGenerator(Request::$REQUEST->getCmd('group'));
if (!$generatorGroup) {
$this->redirect($this->getUrlGeneratorCreate($sliderID,
$groupData['group_id']));
}
$sources = $generatorGroup->getSources();
if (empty($sources)) {
Notification::error($generatorGroup->getError());
$this->redirect($this->getUrlGeneratorCreate($sliderID,
$groupData['group_id']));
}
if (count($sources) == 1) {
/**
* There is only one source in this generator. Skip to
the next step.
*/
reset($sources);
$this->redirect($this->getUrlGeneratorCreateSettings($generatorGroup->getName(),
$sources[key($sources)]->getName(), $sliderID,
$groupData['group_id']));
}
$view = new ViewGeneratorCreateStep3Sources($this);
$view->setGroupData($groupData['group_id'],
$groupData['title']);
$view->setSlider($slider);
$view->setGeneratorGroup($generatorGroup);
$view->display();
}
}
}
public function actionEdit() {
if ($this->validatePermission('smartslider_edit')) {
$generatorId =
Request::$REQUEST->getInt('generator_id');
$generatorModel = new ModelGenerator($this);
$generator = $generatorModel->get($generatorId);
if ($this->validateDatabase($generator)) {
Request::$REQUEST->set('group',
$generator['group']);
Request::$REQUEST->set('type',
$generator['type']);
$slidesModel = new ModelSlides($this);
$slides = $slidesModel->getAll(-1, 'OR
generator_id = ' . $generator['id'] . '');
if (count($slides) > 0) {
$slide = $slides[0];
Request::$REQUEST->set('sliderid',
$slide['slider']);
$slidersModel = new ModelSliders($this);
$slider =
$slidersModel->get($slide['slider']);
$groupData =
$this->getGroupData($slider['id']);
$group = $generator['group'];
$type = $generator['type'];
$generatorGroup =
$generatorModel->getGeneratorGroup($group);
if (!$generatorGroup) {
$this->redirect($this->getUrlSlideEdit($slide['id'],
$slider['id'], $groupData['group_id']));
}
$generatorSource =
$generatorGroup->getSource($type);
if (!$generatorSource) {
$this->redirect($this->getUrlSlideEdit($slide['id'],
$slider['id'], $groupData['group_id']));
}
$view = new ViewGeneratorEdit($this);
$view->setGroupData($groupData['group_id'],
$groupData['title']);
$view->setSlider($slider);
$view->setSlide($slide);
$view->setGenerator($generator);
$view->setGeneratorGroup($generatorGroup);
$view->setGeneratorSource($generatorSource);
$view->display();
} else {
$this->redirect($this->getUrlDashboard());
}
} else {
$this->redirect($this->getUrlDashboard());
}
}
}
public function actionCreateSettings() {
if ($this->validatePermission('smartslider_edit')) {
$slidersModel = new ModelSliders($this);
$sliderID =
Request::$REQUEST->getInt('sliderid');
if (!($slider = $slidersModel->get($sliderID))) {
$this->redirectToSliders();
}
$groupData = $this->getGroupData($slider['id']);
$generatorGroup =
GeneratorFactory::getGenerator(Request::$REQUEST->getCmd('group'));
$source =
$generatorGroup->getSource(Request::$REQUEST->getVar('type'));
if ($source) {
$view = new ViewGeneratorCreateStep4Settings($this);
$view->setGroupData($groupData['group_id'],
$groupData['title']);
$view->setSlider($slider);
$view->setGeneratorGroup($generatorGroup);
$view->setGeneratorSource($source);
$view->display();
} else {
$this->redirect($this->getUrlSliderEdit($slider['id'],
$groupData['group_id']));
}
}
}
public function actionCheckConfiguration() {
if ($this->validatePermission('smartslider_config')
&& $this->validatePermission('smartslider_edit')) {
$group = Request::$REQUEST->getVar('group');
$generatorGroup = GeneratorFactory::getGenerator($group);
$configuration = $generatorGroup->getConfiguration();
$slidersModel = new ModelSliders($this);
$sliderID =
Request::$REQUEST->getInt('sliderid');
if (!($slider = $slidersModel->get($sliderID))) {
$this->redirectToSliders();
}
$groupData = $this->getGroupData($sliderID);
if ($configuration->wellConfigured()) {
$this->redirect($this->getUrlGeneratorCreateStep2($group, $sliderID,
$groupData['group_id']));
}
$view = new ViewGeneratorCreateStep2Configure($this);
$view->setGroupData($groupData['group_id'],
$groupData['title']);
$view->setSlider($slider);
$view->setGeneratorGroup($generatorGroup);
$view->setConfiguration($configuration);
$view->display();
}
}
public function actionFinishAuth() {
if ($this->validatePermission('smartslider_config')) {
$generatorModel = new ModelGenerator($this);
$group = Request::$REQUEST->getVar('group');
$generatorGroup =
$generatorModel->getGeneratorGroup($group);
$configuration = $generatorGroup->getConfiguration();
$result = $configuration->finishAuth($this);
if ($result === true) {
Notification::success(n2_('Authentication
successful.'));
echo
'<script>window.opener.location.reload();self.close();</script>';
} else {
if ($result instanceof Exception) {
$message = $result->getMessage();
} else {
$message = 'Something wrong with the
credentials';
}
echo
'<script>window.opener._N2.Notification.error("' .
htmlspecialchars($message) .
'");self.close();</script>';
}
PageFlow::exitApplication();
}
}
}PK9e�[�8Wpp:Application/Admin/Generator/Template/CreateStep1Groups.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Generator;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Generator\GeneratorBox\BlockGeneratorBox;
use Nextend\SmartSlider3\Generator\AbstractGeneratorGroup;
/**
* @var ViewGeneratorCreateStep1Groups $this
*/
$generatorGroups = $this->getGeneratorGroups();
/** @var AbstractGeneratorGroup[] $installed */
$installed = array();
/** @var AbstractGeneratorGroup[] $notInstalled */
$notInstalled = array();
foreach ($generatorGroups as $generatorGroup) {
if (!$generatorGroup->isDeprecated()) {
if ($generatorGroup->isInstalled()) {
$installed[] = $generatorGroup;
} else {
$notInstalled[] = $generatorGroup;
}
}
}
?>
<div class="n2_slide_generator_step1">
<div
class="n2_slide_generator_step1__installed_generators">
<?php
foreach ($installed as $generatorGroup) {
$blockGeneratorBox = new BlockGeneratorBox($this);
$blockGeneratorBox->setImageUrl($generatorGroup->getImageUrl());
$blockGeneratorBox->setLabel($generatorGroup->getLabel());
$blockGeneratorBox->setButtonLabel(n2_('Choose'));
$blockGeneratorBox->setDescription($generatorGroup->getDescription());
$blockGeneratorBox->setDocsLink($generatorGroup->getDocsLink());
if ($generatorGroup->hasConfiguration()) {
$url =
$this->getUrlGeneratorCheckConfiguration($generatorGroup->getName(),
$this->getSliderID(), $this->groupID);
} else {
$url =
$this->getUrlGeneratorCreateStep2($generatorGroup->getName(),
$this->getSliderID(), $this->groupID);
}
$blockGeneratorBox->setButtonLink($url);
$blockGeneratorBox->display();
}
?>
</div>
<?php if (!empty($notInstalled)): ?>
<div
class="n2_slide_generator_step1__not_installed">
<div
class="n2_slide_generator_step1__not_installed_label">
<?php n2_e('Not installed'); ?>
</div>
<div
class="n2_slide_generator_step1__not_installed_generators">
<?php
foreach ($notInstalled as $generatorGroup) {
$blockGeneratorBox = new BlockGeneratorBox($this);
$blockGeneratorBox->setImageUrl($generatorGroup->getImageUrl());
$blockGeneratorBox->setLabel($generatorGroup->getLabel());
$blockGeneratorBox->setButtonLabel(n2_('Visit'));
$blockGeneratorBox->setButtonLinkTarget('_blank');
$blockGeneratorBox->setButtonLink($generatorGroup->getUrl());
$blockGeneratorBox->setDescription($generatorGroup->getDescription());
$blockGeneratorBox->display();
}
?>
</div>
</div>
<?php endif; ?>
</div>PK9e�[S
JvJJ=Application/Admin/Generator/Template/CreateStep2Configure.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Generator;
use Nextend\Framework\Asset\Js\Js;
/**
* @var ViewGeneratorCreateStep2Configure $this
*/
JS::addInline('new _N2.GeneratorConfigure();');
?>
<form id="n2-ss-form-generator-configure"
action="<?php echo
$this->getAjaxUrlGeneratorCheckConfiguration($this->getGeneratorGroup()
->getName(), $this->getSliderID(),
$this->getGroupID()); ?>" method="post">
<?php
echo $this->renderForm();
?>
</form>PK9e�[z�����;Application/Admin/Generator/Template/CreateStep3Sources.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Generator;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Generator\GeneratorBox\BlockGeneratorBox;
/**
* @var ViewGeneratorCreateStep3Sources $this
*/
$generatorGroup = $this->getGeneratorGroup();
?>
<div class="n2_slide_generator_step3">
<?php
foreach ($generatorGroup->getSources() AS $source) {
$blockGeneratorBox = new BlockGeneratorBox($this);
$blockGeneratorBox->setImageUrl($generatorGroup->getImageUrl());
$blockGeneratorBox->setLabel($source->getLabel());
$blockGeneratorBox->setButtonLink($this->getUrlGeneratorCreateSettings($generatorGroup->getName(),
$source->getName(), $this->getSliderID(), $this->groupID));
$blockGeneratorBox->setButtonLabel(n2_('Choose'));
$blockGeneratorBox->setDescription($source->getDescription());
$blockGeneratorBox->display();
}
?>
</div>PK9e�[����LL<Application/Admin/Generator/Template/CreateStep4Settings.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Generator;
use Nextend\Framework\Asset\Js\Js;
/**
* @var ViewGeneratorCreateStep4Settings $this
*/
$generatorGroup = $this->getGeneratorGroup();
$generatorSource = $this->getGeneratorSource();
JS::addInline('new _N2.GeneratorAdd();');
?>
<form id="n2-ss-form-generator-add" action="<?php echo
$this->getAjaxUrlGeneratorCreateSettings($this->getGeneratorGroup()
->getName(), $this->getGeneratorSource()
->getName(),
$this->getSliderID(), $this->getGroupID()); ?>"
method="post">
<?php
$this->displayForm();
?>
<input name="generator[group]" value="<?php echo
$generatorGroup->getName(); ?>" type="hidden">
<input name="generator[type]" value="<?php echo
$generatorSource->getName(); ?>" type="hidden">
<input name="slider-id" value="<?php echo
$this->getSliderID(); ?>" type="hidden">
</form>PK9e�[�jHE
-Application/Admin/Generator/Template/Edit.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Generator;
use Nextend\Framework\Asset\Js\Js;
use Nextend\SmartSlider3\Settings;
/**
* @var ViewGeneratorEdit $this
*/
$generator = $this->getGenerator();
$generatorGroup = $this->getGeneratorGroup();
$generatorSource = $this->getGeneratorSource();
JS::addInline('new _N2.GeneratorEdit(' . json_encode(array(
'previewInNewWindow' =>
!!Settings::get('preview-new-window', 0),
'previewUrl' =>
$this->getUrlPreviewGenerator($generator['id'])
)) . ');');
?>
<form id="n2-ss-form-generator-edit" action="<?php
echo $this->getAjaxUrlGeneratorEdit($generator['id'],
$this->getGroupID()); ?>" method="post">
<?php
$this->renderForm();
?>
<input name="generator[group]" value="<?php echo
$generatorGroup->getName(); ?>" type="hidden">
<input name="generator[type]" value="<?php echo
$generatorSource->getName(); ?>" type="hidden">
<input name="slider-id" value="<?php echo
$this->getSliderID(); ?>" type="hidden">
</form>PK9e�[�q
���=Application/Admin/Generator/ViewAjaxGeneratorRecordsTable.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Generator;
use Nextend\Framework\View\AbstractViewAjax;
class ViewAjaxGeneratorRecordsTable extends AbstractViewAjax {
/** @var integer */
protected $recordGroup = 1;
/** @var array */
protected $records;
public function display() {
$records = $this->getRecords();
$headings = array();
for ($currentGroupIndex = 1; $currentGroupIndex <=
$this->getRecordGroup(); $currentGroupIndex++) {
$headings[] = '#';
foreach ($records[0][0] AS $recordKey => $v) {
$headings[] = '{' . $recordKey . '/' .
$currentGroupIndex . '}';
}
}
$rows = array();
$i = 0;
foreach ($records AS $recordGroup) {
foreach ($recordGroup AS $record) {
$rows[$i][] = $i + 1;
foreach ($record AS $recordValue) {
$rows[$i][] = htmlspecialchars($recordValue,
ENT_QUOTES, "UTF-8");
}
}
$i++;
}
return array(
'headings' => $headings,
'rows' => $rows
);
}
/**
* @return int
*/
public function getRecordGroup() {
return $this->recordGroup;
}
/**
* @param int $recordGroup
*/
public function setRecordGroup($recordGroup) {
$this->recordGroup = $recordGroup;
}
/**
* @return array
*/
public function getRecords() {
return $this->records;
}
/**
* @param array $records
*/
public function setRecords($records) {
$this->records = $records;
}
}PK9e�[x'5f��>Application/Admin/Generator/ViewGeneratorCreateStep1Groups.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Generator;
use Nextend\Framework\Sanitize;
use Nextend\Framework\View\AbstractView;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\Header\BlockHeader;
use Nextend\SmartSlider3\Application\Admin\Layout\LayoutDefault;
use Nextend\SmartSlider3\Application\Admin\TraitAdminUrl;
use Nextend\SmartSlider3\Generator\AbstractGeneratorGroup;
use Nextend\SmartSlider3\Generator\GeneratorFactory;
class ViewGeneratorCreateStep1Groups extends AbstractView {
use TraitAdminUrl;
protected $groupID = 0;
protected $groupTitle = '';
/** @var array */
protected $slider;
public function display() {
$this->layout = new LayoutDefault($this);
if ($this->groupID) {
$this->layout->addBreadcrumb(Sanitize::esc_html($this->groupTitle),
'ssi_16 ssi_16--folderclosed',
$this->getUrlSliderEdit($this->groupID));
}
$this->layout->addBreadcrumb(Sanitize::esc_html($this->slider['title']),
'ssi_16 ssi_16--image',
$this->getUrlSliderEdit($this->slider['id'],
$this->groupID));
$this->layout->addBreadcrumb(n2_('Add dynamic
slides'), '');
$blockHeader = new BlockHeader($this);
$blockHeader->setHeading(n2_('Add dynamic slides'));
$this->layout->addContentBlock($blockHeader);
$this->layout->addContent($this->render('CreateStep1Groups'));
$this->layout->render();
}
/**
* @param int $groupID
* @param string $groupTitle
*/
public function setGroupData($groupID, $groupTitle) {
$this->groupID = $groupID;
$this->groupTitle = $groupTitle;
}
/**
* @return array
*/
public function getSlider() {
return $this->slider;
}
/**
* @param array $slider
*/
public function setSlider($slider) {
$this->slider = $slider;
}
/**
* @return integer
*/
public function getSliderID() {
return $this->slider['id'];
}
/**
* @return AbstractGeneratorGroup[]
*/
public function getGeneratorGroups() {
return GeneratorFactory::getGenerators();
}
}PK9e�[(0W���AApplication/Admin/Generator/ViewGeneratorCreateStep2Configure.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Generator;
use Nextend\Framework\Sanitize;
use Nextend\Framework\View\AbstractView;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\Header\BlockHeader;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\TopBarMain\BlockTopBarMain;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButtonCancel;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButtonSave;
use Nextend\SmartSlider3\Application\Admin\Layout\LayoutDefault;
use Nextend\SmartSlider3\Application\Admin\TraitAdminUrl;
use Nextend\SmartSlider3\Generator\AbstractGeneratorGroup;
use Nextend\SmartSlider3\Generator\AbstractGeneratorGroupConfiguration;
class ViewGeneratorCreateStep2Configure extends AbstractView {
use TraitAdminUrl;
protected $active = 'general';
/** @var LayoutDefault */
protected $layout;
/**
* @var BlockHeader
*/
protected $blockHeader;
protected $groupID;
protected $groupTitle;
/** @var array */
protected $slider;
/** @var AbstractGeneratorGroup */
protected $generatorGroup;
/** @var AbstractGeneratorGroupConfiguration */
protected $configuration;
/**
* @param int $groupID
* @param string $groupTitle
*/
public function setGroupData($groupID, $groupTitle) {
$this->groupID = $groupID;
$this->groupTitle = $groupTitle;
}
/**
* @return array
*/
public function getSlider() {
return $this->slider;
}
/**
* @param array $slider
*/
public function setSlider($slider) {
$this->slider = $slider;
}
public function hasSlider() {
return !is_null($this->slider);
}
public function getSliderID() {
return $this->slider['id'];
}
/**
* @return mixed
*/
public function getGroupID() {
return $this->groupID;
}
/**
* @return AbstractGeneratorGroup
*/
public function getGeneratorGroup() {
return $this->generatorGroup;
}
/**
* @param AbstractGeneratorGroup $generatorGroup
*/
public function setGeneratorGroup($generatorGroup) {
$this->generatorGroup = $generatorGroup;
}
/**
* @return mixed
*/
public function getConfiguration() {
return $this->configuration;
}
/**
* @param mixed $configuration
*/
public function setConfiguration($configuration) {
$this->configuration = $configuration;
}
public function renderForm() {
$this->configuration->render($this);
}
public function display() {
$this->layout = new LayoutDefault($this);
if ($this->groupID) {
$this->layout->addBreadcrumb(Sanitize::esc_html($this->groupTitle),
'ssi_16 ssi_16--folderclosed',
$this->getUrlSliderEdit($this->groupID));
}
$this->layout->addBreadcrumb(Sanitize::esc_html($this->slider['title']),
'ssi_16 ssi_16--image',
$this->getUrlSliderEdit($this->slider['id'],
$this->groupID));
$this->layout->addBreadcrumb(n2_('Add dynamic
slides'), '',
$this->getUrlGeneratorCreate($this->slider['id'],
$this->groupID));
$this->layout->addBreadcrumb(n2_('Configure') .
' - ' . $this->generatorGroup->getLabel(), '');
$topBar = new BlockTopBarMain($this);
$buttonSave = new BlockButtonSave($this);
$buttonSave->addClass('n2_button--inactive');
$buttonSave->addClass('n2_generator_configuration_save');
$topBar->addPrimaryBlock($buttonSave);
$buttonCancel = new BlockButtonCancel($this);
$buttonCancel->addClass('n2_generator_configuration_cancel');
$buttonCancel->setUrl($this->getUrlGeneratorCreate($this->slider['id'],
$this->groupID));
$topBar->addPrimaryBlock($buttonCancel);
$this->layout->setTopBar($topBar->toHTML());
$blockHeader = new BlockHeader($this);
$blockHeader->setHeading(n2_('Configure') . ':
' . $this->generatorGroup->getLabel());
$this->layout->addContentBlock($blockHeader);
$this->layout->addContent($this->render('CreateStep2Configure'));
$this->layout->render();
}
}PK9e�[�Ԍh� � ?Application/Admin/Generator/ViewGeneratorCreateStep3Sources.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Generator;
use Nextend\Framework\Sanitize;
use Nextend\Framework\View\AbstractView;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\Header\BlockHeader;
use Nextend\SmartSlider3\Application\Admin\Layout\LayoutDefault;
use Nextend\SmartSlider3\Application\Admin\TraitAdminUrl;
use Nextend\SmartSlider3\Generator\AbstractGeneratorGroup;
class ViewGeneratorCreateStep3Sources extends AbstractView {
use TraitAdminUrl;
protected $groupID = 0;
protected $groupTitle = '';
/** @var array */
protected $slider;
/** @var AbstractGeneratorGroup */
protected $generatorGroup;
public function display() {
$this->layout = new LayoutDefault($this);
if ($this->groupID) {
$this->layout->addBreadcrumb(Sanitize::esc_html($this->groupTitle),
'ssi_16 ssi_16--folderclosed',
$this->getUrlSliderEdit($this->groupID));
}
$this->layout->addBreadcrumb(Sanitize::esc_html($this->slider['title']),
'ssi_16 ssi_16--image',
$this->getUrlSliderEdit($this->slider['id'],
$this->groupID));
$this->layout->addBreadcrumb(n2_('Add dynamic
slides'), '',
$this->getUrlGeneratorCreate($this->slider['id'],
$this->groupID));
$this->layout->addBreadcrumb($this->generatorGroup->getLabel(),
'');
$blockHeader = new BlockHeader($this);
$blockHeader->setHeading(n2_('Add dynamic slides') .
': ' . $this->generatorGroup->getLabel());
$this->layout->addContentBlock($blockHeader);
$this->layout->addContent($this->render('CreateStep3Sources'));
$this->layout->render();
}
/**
* @param int $groupID
* @param string $groupTitle
*/
public function setGroupData($groupID, $groupTitle) {
$this->groupID = $groupID;
$this->groupTitle = $groupTitle;
}
/**
* @return array
*/
public function getSlider() {
return $this->slider;
}
/**
* @param array $slider
*/
public function setSlider($slider) {
$this->slider = $slider;
}
/**
* @return int
*/
public function getSliderID() {
return $this->slider['id'];
}
/**
* @return AbstractGeneratorGroup
*/
public function getGeneratorGroup() {
return $this->generatorGroup;
}
/**
* @param AbstractGeneratorGroup $generatorGroup
*/
public function setGeneratorGroup($generatorGroup) {
$this->generatorGroup = $generatorGroup;
}
}PK9e�[5w@Application/Admin/Generator/ViewGeneratorCreateStep4Settings.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Generator;
use Nextend\Framework\Form\Element\Token;
use Nextend\Framework\Form\Form;
use Nextend\Framework\Sanitize;
use Nextend\Framework\View\AbstractView;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\Header\BlockHeader;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\TopBarMain\BlockTopBarMain;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButtonCancel;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButtonSave;
use Nextend\SmartSlider3\Application\Admin\Layout\LayoutDefault;
use Nextend\SmartSlider3\Application\Admin\TraitAdminUrl;
use Nextend\SmartSlider3\Application\Model\ModelGenerator;
use Nextend\SmartSlider3\Generator\AbstractGenerator;
use Nextend\SmartSlider3\Generator\AbstractGeneratorGroup;
class ViewGeneratorCreateStep4Settings extends AbstractView {
use TraitAdminUrl;
protected $groupID = 0;
protected $groupTitle = '';
/** @var array */
protected $slider;
/** @var AbstractGeneratorGroup */
protected $generatorGroup;
/** @var AbstractGenerator */
protected $generatorSource;
public function display() {
$this->layout = new LayoutDefault($this);
if ($this->groupID) {
$this->layout->addBreadcrumb(Sanitize::esc_html($this->groupTitle),
'ssi_16 ssi_16--folderclosed',
$this->getUrlSliderEdit($this->groupID));
}
$this->layout->addBreadcrumb(Sanitize::esc_html($this->slider['title']),
'ssi_16 ssi_16--image',
$this->getUrlSliderEdit($this->slider['id'],
$this->groupID));
$this->layout->addBreadcrumb(n2_('Add dynamic
slides'), '',
$this->getUrlGeneratorCreate($this->slider['id'],
$this->groupID));
$this->layout->addBreadcrumb($this->generatorGroup->getLabel(),
'',
$this->getUrlGeneratorCreateStep2($this->generatorGroup->getName(),
$this->slider['id'], $this->groupID));
$this->layout->addBreadcrumb($this->generatorSource->getLabel(),
'');
$topBar = new BlockTopBarMain($this);
$buttonSave = new BlockButtonSave($this);
$buttonSave->addClass('n2_generator_add');
$buttonSave->setLabel(n2_('Add'));
$topBar->addPrimaryBlock($buttonSave);
$buttonCancel = new BlockButtonCancel($this);
$buttonCancel->addClass('n2_generator_add_cancel');
$buttonCancel->setUrl($this->getUrlSliderEdit($this->slider['id'],
$this->groupID));
$topBar->addPrimaryBlock($buttonCancel);
$this->layout->setTopBar($topBar->toHTML());
$blockHeader = new BlockHeader($this);
$blockHeader->setHeading(n2_('Add dynamic slides') .
': ' . $this->generatorGroup->getLabel() . ' - '
. $this->generatorSource->getLabel());
$this->layout->addContentBlock($blockHeader);
$this->layout->addContent($this->render('CreateStep4Settings'));
$this->layout->render();
}
/**
* @param int $groupID
* @param string $groupTitle
*/
public function setGroupData($groupID, $groupTitle) {
$this->groupID = $groupID;
$this->groupTitle = $groupTitle;
}
/**
* @return array
*/
public function getSlider() {
return $this->slider;
}
/**
* @return int
*/
public function getGroupID() {
return $this->groupID;
}
/**
* @param array $slider
*/
public function setSlider($slider) {
$this->slider = $slider;
}
/**
* @return integer
*/
public function getSliderID() {
return $this->slider['id'];
}
/**
* @return AbstractGeneratorGroup
*/
public function getGeneratorGroup() {
return $this->generatorGroup;
}
/**
* @param AbstractGeneratorGroup $generatorGroup
*/
public function setGeneratorGroup($generatorGroup) {
$this->generatorGroup = $generatorGroup;
}
/**
* @return AbstractGenerator
*/
public function getGeneratorSource() {
return $this->generatorSource;
}
/**
* @param AbstractGenerator $generatorSource
*/
public function setGeneratorSource($generatorSource) {
$this->generatorSource = $generatorSource;
}
public function displayForm() {
$form = new Form($this, 'generator');
new Token($form->getFieldsetHidden());
$this->generatorSource->renderFields($form->getContainer());
$generatorModel = new ModelGenerator($this);
$generatorModel->renderFields($form->getContainer());
echo $form->render();
}
}PK9e�[�K1Application/Admin/Generator/ViewGeneratorEdit.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Generator;
use Nextend\Framework\Data\Data;
use Nextend\Framework\Form\Element\Token;
use Nextend\Framework\Form\Form;
use Nextend\Framework\Sanitize;
use Nextend\Framework\View\AbstractView;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\Header\BlockHeader;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\TopBarMain\BlockTopBarMain;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButtonBack;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButtonPlainIcon;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButtonSave;
use Nextend\SmartSlider3\Application\Admin\Layout\LayoutDefault;
use Nextend\SmartSlider3\Application\Admin\TraitAdminUrl;
use Nextend\SmartSlider3\Application\Model\ModelGenerator;
use Nextend\SmartSlider3\Generator\AbstractGenerator;
use Nextend\SmartSlider3\Generator\AbstractGeneratorGroup;
class ViewGeneratorEdit extends AbstractView {
use TraitAdminUrl;
protected $groupID;
protected $groupTitle;
/** @var array */
protected $slider;
/** @var array */
protected $slide;
/** @var array */
protected $generator;
/** @var AbstractGeneratorGroup */
protected $generatorGroup;
/** @var AbstractGenerator */
protected $generatorSource;
public function display() {
$this->layout = new LayoutDefault($this);
if ($this->groupID) {
$this->layout->addBreadcrumb(Sanitize::esc_html($this->groupTitle),
'ssi_16 ssi_16--folderclosed',
$this->getUrlSliderEdit($this->groupID));
}
$this->layout->addBreadcrumb(Sanitize::esc_html($this->slider['title']),
'ssi_16 ssi_16--image',
$this->getUrlSliderEdit($this->getSliderID(), $this->groupID));
$this->layout->addBreadcrumb(n2_('Slide'),
'ssi_16 ssi_16--slides',
$this->getUrlSlideEdit($this->slide['id'],
$this->getSliderID(), $this->groupID));
$this->layout->addBreadcrumb(n2_('Generator'),
'ssi_16 ssi_16--cog');
$topBar = new BlockTopBarMain($this);
$buttonSave = new BlockButtonSave($this);
$buttonSave->addClass('n2_button--inactive');
$buttonSave->addClass('n2_generator_settings_save');
$topBar->addPrimaryBlock($buttonSave);
$buttonBack = new BlockButtonBack($this);
$buttonBack->setUrl($this->getUrlSlideEdit($this->slide['id'],
$this->getSliderID(), $this->groupID));
$buttonBack->addClass('n2_generator_settings_back');
$topBar->addPrimaryBlock($buttonBack);
$buttonPreview = new BlockButtonPlainIcon($this);
$buttonPreview->addAttribute('id',
'n2-ss-preview');
$buttonPreview->addClass('n2_top_bar_button_icon');
$buttonPreview->addClass('n2_top_bar_main__preview');
$buttonPreview->setIcon('ssi_24 ssi_24--preview');
$buttonPreview->addAttribute('data-n2tip',
n2_('Preview'));
$buttonPreview->setUrl($this->getUrlPreviewIndex($this->slider['id']));
$topBar->addPrimaryBlock($buttonPreview);
$this->layout->setTopBar($topBar->toHTML());
$blockHeader = new BlockHeader($this);
$blockHeader->setHeading(n2_('Generator') . ':
' . $this->generatorGroup->getLabel() . ' - ' .
$this->generatorSource->getLabel());
$this->layout->addContentBlock($blockHeader);
$this->layout->addContent($this->render('Edit'));
$this->layout->render();
}
public function renderForm() {
$params = new Data($this->generator['params'], true);
$slideParams = new Data($this->slide['params'], true);
$params->set('record-slides',
$slideParams->get('record-slides', 1));
$form = new Form($this, 'generator');
new Token($form->getFieldsetHidden());
$form->loadArray($params->toArray());
$this->generatorSource->renderFields($form->getContainer());
$generatorModel = new ModelGenerator($this);
$generatorModel->renderFields($form->getContainer());
echo $form->render();
}
/**
* @param int $groupID
* @param string $groupTitle
*/
public function setGroupData($groupID, $groupTitle) {
$this->groupID = $groupID;
$this->groupTitle = $groupTitle;
}
/**
* @return array
*/
public function getSlider() {
return $this->slider;
}
/**
* @param array $slider
*/
public function setSlider($slider) {
$this->slider = $slider;
}
/**
* @return integer
*/
public function getSliderID() {
return $this->slider['id'];
}
/**
* @return mixed
*/
public function getGroupID() {
return $this->groupID;
}
/**
* @return array
*/
public function getSlide() {
return $this->slide;
}
/**
* @param array $slide
*/
public function setSlide($slide) {
$this->slide = $slide;
}
/**
* @return array
*/
public function getGenerator() {
return $this->generator;
}
/**
* @param array $generator
*/
public function setGenerator($generator) {
$this->generator = $generator;
}
/**
* @return AbstractGeneratorGroup
*/
public function getGeneratorGroup() {
return $this->generatorGroup;
}
/**
* @param AbstractGeneratorGroup $generatorGroup
*/
public function setGeneratorGroup($generatorGroup) {
$this->generatorGroup = $generatorGroup;
}
/**
* @return AbstractGenerator
*/
public function getGeneratorSource() {
return $this->generatorSource;
}
/**
* @param AbstractGenerator $generatorSource
*/
public function setGeneratorSource($generatorSource) {
$this->generatorSource = $generatorSource;
}
}PK9e�[���XX)Application/Admin/Help/ControllerHelp.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Help;
use Nextend\Framework\Api;
use Nextend\Framework\Model\StorageSectionManager;
use Nextend\Framework\Notification\Notification;
use Nextend\SmartSlider3\Application\Admin\AbstractControllerAdmin;
class ControllerHelp extends AbstractControllerAdmin {
public function actionIndex() {
$view = new ViewHelpIndex($this);
$view->display();
}
public function actionBrowserIncompatible() {
$view = new ViewHelpBrowserIncompatible($this);
$view->display();
}
public function actionTestApi() {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, Api::getApiUrl());
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$errorFile = dirname(__FILE__) . '/curl_error.txt';
$out = fopen($errorFile, "w");
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_STDERR, $out);
$output = curl_exec($ch);
curl_close($ch);
fclose($out);
$log = array("API Connection Test");
$log[] = htmlspecialchars(file_get_contents($errorFile));
unlink($errorFile);
if (!empty($output)) {
$log[] = "RESPONSE: " . htmlspecialchars($output);
}
if (strpos($output, 'ACTION_MISSING') === false) {
Notification::error(sprintf(n2_('Unable to connect to the
API (%s).') . '<br>' . n2_('See <b>Debug
Information</b> for more details!'), Api::getApiUrl()));
} else {
Notification::notice(n2_('Successful connection with the
API.'));
}
$log[] = '------------------------------------------';
$log[] = '';
StorageSectionManager::getStorage('smartslider')
->set('log', 'api',
json_encode($log));
$this->redirect($this->getUrlHelp());
}
}PK9e�[o��+$+$)Application/Admin/Help/Template/Index.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Help;
use Nextend\Framework\Filesystem\Filesystem;
use Nextend\Framework\Platform\Platform;
use Nextend\Framework\Url\Url;
use Nextend\SmartSlider3\SmartSlider3Info;
/**
* @var $this ViewHelpIndex
*/
$conflicts = $this->getConflicts();
?>
<div class="n2_help_center">
<div class="n2_help_center__getting_started">
<div
class="n2_help_center__getting_started__heading">
<?php n2_e('Welcome to Help Center'); ?>
</div>
<div
class="n2_help_center__getting_started__subheading">
<?php n2_e('To help you get started, we\'ve put
together a super tutorial video that shows you the basic settings.');
?>
</div>
<div
class="n2_help_center__getting_started__video">
<div
class="n2_help_center__getting_started__video_placeholder"></div>
<iframe width="560" height="315"
src="https://www.youtube-nocookie.com/embed/videoseries?list=PLSawiBnEUNfvVeY7M8Yx7UdyOpBEmoH7Z&rel=0"
allow="accelerometer; autoplay; encrypted-media; gyroscope;
picture-in-picture" allowfullscreen></iframe>
</div>
</div>
<?php
if (!empty($conflicts)) {
?>
<div class="n2_help_center__conflicts"
id="n2_help_center__possible_conflicts">
<div
class="n2_help_center__conflicts_icon"><i
class="ssi_48 ssi_48--bug"></i></div>
<div
class="n2_help_center__conflicts_label"><?php
n2_e('Possible conflicts'); ?></div>
<div
class="n2_help_center__conflicts_description">
<div
class="n2_help_center__conflicts_test_api">
<a href="<?php echo
$this->getUrlHelpTestApi(); ?>">
<?php n2_e('Test connection'); ?>
</a>
</div>
<?php if (empty($conflicts)): ?>
<div
class="n2_help_center__no_conflicts_detected"><?php
n2_e('No conflicts detected.'); ?></div>
<?php else: ?>
<?php foreach ($conflicts as $conflict): ?>
<div
class="n2_help_center__conflicts_detected"><?php echo
$conflict; ?></div>
<?php endforeach; ?>
<?php endif; ?>
</div>
</div>
<?php
}
?>
<div class="n2_help_center__search">
<div class="n2_help_center__search_heading">
<?php n2_e('Hello! How can we help you today?');
?>
</div>
<div class="n2_help_center__search_field">
<form target="_blank"
action="https://smartslider.helpscoutdocs.com/search"
method="get">
<input name="query" type="text"
placeholder="<?php n2_e('Search in the knowledge base');
?>">
<button type="submit"><?php
n2_e('Search'); ?></button>
</form>
</div>
</div>
<div class="n2_help_center__actions">
<div class="n2_help_center__action">
<a class="n2_help_center__action_link"
href="<?php echo
'https://smartslider.helpscoutdocs.com/?utm_campaign=' .
SmartSlider3Info::$campaign .
'&utm_source=dashboard-documentation&utm_medium=smartslider-'
. Platform::getName() . '-' . SmartSlider3Info::$plan;
?>"
target="_blank"></a>
<div class="n2_help_center__action_icon"><i
class="ssi_48 ssi_48--doc"></i></div>
<div
class="n2_help_center__action_label"><?php
n2_e('Documentation'); ?></div>
<div
class="n2_help_center__action_description"><?php
n2_e('To get started with Smart Slider 3, please refer to this guide
for downloading, installing, and using.'); ?></div>
</div>
<div class="n2_help_center__action">
<a class="n2_help_center__action_link"
href="https://smartslider3.com/contact-us/support/"
onclick="document.getElementById('n2_support_form').submit();
return false;"></a>
<div class="n2_help_center__action_icon"><i
class="ssi_48 ssi_48--help"></i></div>
<div
class="n2_help_center__action_label"><?php n2_e('Email
support'); ?></div>
<div
class="n2_help_center__action_description"><?php
n2_e('Need one-to-one assistance? Get in touch with our Support team!
We\'d love the opportunity to help you.'); ?></div>
</div>
<div class="n2_help_center__action">
<a class="n2_help_center__action_link"
href="<?php echo
'https://www.youtube.com/watch?v=3PPtkRU7D74&list=PLSawiBnEUNfvVeY7M8Yx7UdyOpBEmoH7Z&utm_campaign='
. SmartSlider3Info::$campaign .
'&utm_source=dashboard-watch-videos&utm_medium=smartslider-'
. Platform::getName() . '-' . SmartSlider3Info::$plan;
?>"
target="_blank"></a>
<div class="n2_help_center__action_icon"><i
class="ssi_48 ssi_48--camera"></i></div>
<div
class="n2_help_center__action_label"><?php
n2_e('Tutorial videos'); ?></div>
<div
class="n2_help_center__action_description"><?php
n2_e('Check our video tutorials which cover everything you need to
know about Smart Slider 3.'); ?></div>
</div>
</div>
<div class="n2_help_center__articles_heading">
<?php n2_e('Selected articles'); ?>
</div>
<div class="n2_help_center__articles">
<?php
foreach ($this->getArticles() as $article) {
?>
<div class="n2_help_center__article">
<a class="n2_help_center__article_link"
href="<?php echo $article['url']; ?>"
target="_blank"></a>
<div
class="n2_help_center__article_label"><?php echo
$article['label']; ?></div>
<i class="ssi_16 ssi_16--breadcrumb
n2_help_center__article_icon"></i>
</div>
<?php
}
?>
</div>
<?php
if (empty($conflicts)) {
?>
<div class="n2_help_center__conflicts"
id="n2_help_center__possible_conflicts">
<div
class="n2_help_center__conflicts_icon"><i
class="ssi_48 ssi_48--bug"></i></div>
<div
class="n2_help_center__conflicts_label"><?php
n2_e('Possible conflicts'); ?></div>
<div
class="n2_help_center__conflicts_description">
<div
class="n2_help_center__conflicts_test_api">
<a href="<?php echo
$this->getUrlHelpTestApi(); ?>">
<?php n2_e('Test connection'); ?>
</a>
</div>
<?php if (empty($conflicts)): ?>
<div
class="n2_help_center__no_conflicts_detected"><?php
n2_e('No conflicts detected.'); ?></div>
<?php else: ?>
<?php foreach ($conflicts as $conflict): ?>
<div
class="n2_help_center__conflicts_detected"><?php echo
$conflict; ?></div>
<?php endforeach; ?>
<?php endif; ?>
</div>
</div>
<?php
}
?>
<?php
?>
<div class="n2_help_center__system_information">
<div
class="n2_help_center__system_information_label">
<?php n2_e('Debug information'); ?>
</div>
<form id="n2_support_form"
class="n2_help_center__system_information_form"
method="post"
action="https://smartslider3.com/contact-us/support/"
target="_blank">
<?php
$debug = array(
'Smart Slider 3 - version: ' .
SmartSlider3Info::$completeVersion,
'Plan: ' . SmartSlider3Info::$plan,
'Platform: ' . Platform::getLabel() . ' -
' . Platform::getVersion(),
'Site url: ' . Platform::getSiteUrl(),
'Path: ' . Filesystem::getBasePath(),
'Uri: ' . Url::getBaseUri(),
'Browser: ' .
$_SERVER['HTTP_USER_AGENT'],
''
);
$curlLog = $this->getCurlLog();
if (!empty($curlLog)) {
$debug = array_merge($debug, $curlLog);
$debug[] = '';
}
if (function_exists('ini_get')) {
$debug[] = 'PHP: ' . phpversion();
$debug[] = 'PHP - memory_limit: ' .
ini_get('memory_limit');
$debug[] = 'PHP - max_input_vars: ' .
ini_get('max_input_vars');
$opcache = ini_get('opcache.enable');
$debug[] = 'PHP - opcache.enable: ' .
intval($opcache);
if ($opcache) {
$debug[] = 'PHP - opcache.revalidate_freq: '
. ini_get('opcache.revalidate_freq');
}
$debug[] = '';
}
$debugConflicts = $this->getDebugConflicts();
if (empty($debugConflicts)) {
$debug[] = 'No conflicts detected';
} else {
$debug[] = 'Conflicts:';
foreach ($debugConflicts as $conflict) {
$debug[] = ' - ' . $conflict;
}
$debug[] = '';
}
$debug = array_merge($debug, Platform::getDebug());
?>
<textarea readonly name="debug_information"
style="width:100%;height:800px;"><?php echo
htmlspecialchars(implode("\n", $debug), ENT_QUOTES,
'utf-8'); ?></textarea>
</form>
</div>
</div>
PK9e�[$=e���6Application/Admin/Help/ViewHelpBrowserIncompatible.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Help;
use Nextend\Framework\View\AbstractView;
use Nextend\SmartSlider3\Application\Admin\Layout\LayoutError;
class ViewHelpBrowserIncompatible extends AbstractView {
public function display() {
$this->layout = new LayoutError($this);
$browsers = array(
sprintf(n2_('%s or later'), 'Chrome 68'),
sprintf(n2_('%s or later'), 'Firefox 52'),
sprintf(n2_('%s or later'), 'Safari 10'),
sprintf(n2_('%s or later'), 'Opera 55'),
sprintf(n2_('%s or later'), 'Edge 18'),
);
$this->layout->setError(n2_('You are using an
unsupported browser!'), sprintf(n2_('Smart Slider 3 does not
support your current browser for editing. Supported browsers are the
following: %s.'), implode(', ', $browsers)),
'https://smartslider.helpscoutdocs.com/article/1716-system-requirements');
$this->layout->render();
}
}PK9e�[BZ;��(Application/Admin/Help/ViewHelpIndex.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Help;
use Nextend\Framework\View\AbstractView;
use Nextend\SmartSlider3\Application\Admin\Layout\LayoutDefault;
use Nextend\SmartSlider3\Application\Admin\TraitAdminUrl;
use Nextend\SmartSlider3\Conflict\Conflict;
class ViewHelpIndex extends AbstractView {
use TraitAdminUrl;
/** @var Conflict */
protected $conflict;
public function __construct($controller) {
parent::__construct($controller);
$this->conflict = Conflict::getInstance();
}
public function display() {
$this->layout = new LayoutDefault($this);
$this->layout->addBreadcrumb(n2_('Help center'),
'', $this->getUrlHelp());
$this->layout->addContent($this->render('Index'));
$this->layout->render();
}
public function getConflicts() {
return $this->conflict->getConflicts();
}
public function getDebugConflicts() {
return $this->conflict->getDebugConflicts();
}
public function getCurlLog() {
return $this->conflict->getCurlLog();
}
/**
* @return array
*/
public function getArticles() {
$arr = array(
array(
'url' =>
'https://smartslider.helpscoutdocs.com/article/1718-activation',
'label' => 'How to activate Smart Slider
3?'
),
array(
'url' =>
'https://smartslider.helpscoutdocs.com/category/1709-layer-animations-events',
'label' => 'Layer animation & Event
tutorials'
),
array(
'url' =>
'https://smartslider.helpscoutdocs.com/article/1774-slider-settings-size',
'label' => 'How to hide the slider on
moble?'
)
);
return array_merge($arr, array(
array(
'url' =>
'https://smartslider.helpscoutdocs.com/article/1916-slide-editing-in-smart-slider-3',
'label' => 'Slide editing in Smart Slider
3'
),
array(
'url' =>
'https://smartslider.helpscoutdocs.com/article/1809-slider-settings-slides#slides-design',
'label' => 'Why are my images
cropped?'
),
array(
'url' =>
'https://smartslider.helpscoutdocs.com/article/1924-how-to-add-a-video',
'label' => 'How can I add a video?'
),
array(
'url' =>
'https://smartslider.helpscoutdocs.com/article/1807-slider-settings-autoplay',
'label' => 'Where is the autoplay?'
),
array(
'url' =>
'https://smartslider.helpscoutdocs.com/article/1919-video-autoplay-handling',
'label' => 'Why isn\'t my video
autoplaying?'
),
array(
'url' =>
'https://smartslider.helpscoutdocs.com/article/1925-how-to-speed-up-your-site',
'label' => 'How can I speed up my
site?'
),
array(
'url' =>
'https://smartslider.helpscoutdocs.com/category/1699-publishing',
'label' => 'How can I publish my
sliders?'
),
array(
'url' =>
'https://smartslider.helpscoutdocs.com/article/1828-using-your-own-fonts',
'label' => 'How to use different fonts in
the slider?'
),
array(
'url' =>
'https://smartslider.helpscoutdocs.com/article/1725-dynamic-slide-basics',
'label' => 'What is a dynamic
slide?'
),
array(
'url' =>
'https://smartslider.helpscoutdocs.com/collection/1712-troubleshooting',
'label' => 'Troubleshooting'
)
));
}
}PK9e�[��H�55+Application/Admin/JavaScriptTranslation.phpnu�[���<?php
\Nextend\Framework\Localization\Localization::addJS(array("%s or newer
required for this feature.","Above %s
pixels.","Action","Activate","Activate Smart
Slider 3 Pro","Activation is required to unlock all
features!","Add animation","Add
keyframe","Add Layer","Add
post","Adjust","Advanced","Align
(Absolute)","All layers, all devices","All layers,
current device","An event you use to trigger layer animation(s)
with","Animated
heading","Animation","Animation tab","Are you
sure?","Area","Arrows","Audio","Auto","Autoplay
duration","Backward","Below %s
pixels.","Between %s and %s
pixels.","Block","Bottom","Boxed","Button","Cancel","Caption","Carousel","Center","Change
group","Change slider type","Changing your slider type
is irreversible. After changing your slider type, <b>you will lose
all slider type related settings</b>.","Child
layers","Choose folder","Choose
images","Circle counter","Clean HTML","Clear
device specific settings","Clear
guides","Close","Column","Content","Content
List - One Per Line","Content
tab","Convert","Convert to
slide","Copy","Copy slide
to","Counter","Create","Create a New
Project","Create group","Create new
project","Current layer, all devices","Current layer,
current device","Current
path","Dashboard","Data","Delete","Delete
permanently","delete these slides","delete this
slide","delete this
slider","Deleted.","Desktop","Direction","Disabled","Done","Drop
files here or","Duplicate","Edit
generator","Editor settings","Empty","empty
the trash","Enabled","Event
name","Examples","Filter","Find
image","Find link","Forward","Full
page","Full width","General","Go
Pro","Go to slide","Go to slide ID","Got
it","Group","Group created","Group
name","Groups","Guide
settings","Heading","Height","Hide
on","Highlighted
heading","HTML","Icon","Icon not
found","Icons","Iframe","Image","Image
area","Image box","Image field can not be
empty!","Input","Insert","Insert
group","Join more than 120,000 subscribers and get access to the
latest slider templates, tips, tutorials and other exclusive contents
directly to your inbox.","Join The Smart Slider 3
Community","Joomla module","Keyboard
shortcuts","Keyframe","Landscape","Laptop","Large
desktop","Large mobile","Large
tablet","Layer","Layer Animation -
Basic","Layer Animation - Reveal","Layer design options
affect every device. If you need to make responsive adjustments, look for
the options with the device icon.","Layer
List","Layer(s)","Layout","Left","Lightbox","List","Load
style","Loop","Loops %s and returns to starting
slide.","Loops %s and stops before starting
slide.","Middle","Mobile","Move
(Absolute)","Move to trash","My
project","Name","Next
slide","No","No file
selected.","Notice","Numeric
keys","Off","On","Oops, Something Went
Wrong","Open docs","Open/Close","or import
your own files","Orientation","Outer
%s","Overwrite preset","Parent","Parent
directory","Paste","Pick the align point of the child
layer!","Pick the align point of the parent
layer!","Pick the parent layer!","Play
animations","Please fill the name field!","Please
select a Post
first!","Portrait","Posts","Preset","Preset
deleted.","Preset saved.","Preview","Previous
slide","Pro","Progress bar","Project
type","Publish","Records","Redo","Register
Smart Slider 3 Pro on this domain to enable auto update, slider templates
and slide library.","Remove animations","Remove
HTML","Remove line breaks","Remove
links","Rename","Reset style to
default","Respect
words","Result","Right","Round to
5px","Row","Ruler","Save","Save
as","Save as New","Save style as new
preset","Saved.","Scroll to","Scroll to
alias","Scrolls to the bottom of the page.","Scrolls to
the top of the page.","Search","Search
keyword","Select","Select A Slider","Select
image","Set","Set as
first","Settings","Show/Hide in
editor","Showcase","Simple","Size","Skip","Slide","Slide
event","Slide height","Slide ID","Slide
index","slide index: 2 %s direction: backward","slide
index: 5 %s direction: forward","Slide title","Slide
width","Slider","Slider alias","Slider alias
set at Slider settings > General","Slider
type","Smart Slider 3 activated!","Smart
snap","Special Zero","Split by Chars","Start
a new project from scratch and build exactly what you’ve imagined. You
can easily customize every pixels and create anything with
layers.","Start with a Template","Start with a template
and make it your own with the innovative drag and drop interface. You can
choose from hundreds of premade
templates.","Static","Strict","Style
tab","Subscribe","Success","Switches %s
slide(s).","Switches to the %s. slide.","Switches to
the fifth slide as if the next arrow was pressed","Switches to
the second slide as if the previous arrow was pressed","Switches
to the slide with the #2 ID as if the previous arrow was
pressed","Switches to the slide with the #5 ID as if the next
arrow was pressed","Tablet","Text","Text
animation in","Text animation out","The changes you
made will be lost if you navigate away from this page.","The
image is empty","Theme","There is no layer available to
be parent of the current layer!","This block is not available in
the free version. %s","This section requires activated Pro
version.","This slide is hidden on the following devices:
%s","Timeline","Titles - One Per
Line","Top","Top and
bottom","Transition","Undo","Unexpected
response","Unpublish","Up","Upgrade to
Pro","Upload","URL","Use default
selector","Use Joomla selector","Use our powerful
visual editor, or simply import one of our existing
template.","Video","View","What do you want
to create today?","Width","You can use any jQuery
selector to scroll to a specific element on the page. Example:
\"#pricing\" scrolls to the element with the id of
\"pricing\".","You can use presets to save style
settings for later use. Clicking on any preset will load its styling to
your current layer, and the previous style settings will be
lost.","You have not created any presets for this layer
yet."));PK9e�[��"\/Application/Admin/Layout/AbstractLayoutMenu.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Layout;
use Nextend\Framework\Platform\Platform;
use Nextend\Framework\Request\Request;
use Nextend\Framework\View\AbstractLayout;
use Nextend\Framework\View\Html;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\NavBar\BlockNavBar;
use Nextend\SmartSlider3\Application\Admin\TraitAdminUrl;
use Nextend\SmartSlider3\SmartSlider3Info;
abstract class AbstractLayoutMenu extends AbstractLayout {
use TraitAdminUrl;
/** @var BlockNavBar */
protected $header;
protected $classes = array();
public function __construct($view) {
$this->header = new BlockNavBar($this);
parent::__construct($view);
$this->header->setLogo($this->getApplicationType()
->getLogo());
$this->header->setSidebarLink($this->getUrlDashboard());
$cmd = Request::$REQUEST->getVar("nextendcontroller",
"sliders");
$this->header->addMenuItem(Html::link(n2_('Settings'),
$this->getUrlSettingsDefault()), $cmd == "settings");
$this->header->addMenuItem(Html::link(n2_('Help'),
$this->getUrlHelp()), $cmd == "help");
}
public function addHeaderMenuItem($item) {
$this->header->addMenuItem($item);
}
/**
* @param $label
* @param $icon
* @param string $url
*
* @return Helper\Breadcrumb
*/
public function addBreadcrumb($label, $icon = '', $url =
'#') {
return $this->header->addBreadcrumb($label, $icon, $url);
}
public function getHeader() {
return $this->header->toHTML();
}
public function getClasses() {
return $this->classes;
}
public function addClass($class) {
$this->classes[] = $class;
}
}PK9e�[��<��3Application/Admin/Layout/Block/Core/Admin/Admin.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\Admin;
use Nextend\Framework\Notification\Notification;
use Nextend\Framework\Plugin;
use Nextend\SmartSlider3\Settings;
use Nextend\SmartSlider3\SmartSlider3Info;
/**
* @var $this BlockAdmin
*/
SmartSlider3Info::initLicense();
if (intval(Settings::get('force-rtl-backend', 0))) {
?>
<script>
jQuery(document).ready(function () {
jQuery("html").attr("dir",
"rtl");
});
</script>
<?php
}
?>
<div <?php $this->renderAttributes(); ?>>
<div class="n2_admin__header">
<?php echo $this->getHeader(); ?>
</div>
<div class="n2_admin__content">
<?php echo $this->getSubNavigation(); ?>
<?php $this->displayTopBar(); ?>
<?php echo $this->displayContent(); ?>
</div>
<?php
Plugin::doAction('afterApplicationContent');
?>
</div>
<?php
Notification::show();PK9e�[����t t 8Application/Admin/Layout/Block/Core/Admin/BlockAdmin.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\Admin;
use Nextend\Framework\View\AbstractBlock;
use Nextend\Framework\View\AbstractLayout;
use Nextend\Framework\View\Html;
class BlockAdmin extends AbstractBlock {
/**
* @var AbstractLayout
*/
protected $layout;
protected $id = 'n2-admin';
protected $classes = array(
'n2',
'n2_admin',
'n2_admin_ui',
'fitvidsignore'
);
protected $attributes = array();
protected $header = '';
protected $subNavigation = '';
/**
* @var string
*/
protected $topBar = '';
/**
* @param AbstractLayout $layout
*/
public function setLayout($layout) {
$this->layout = $layout;
}
public function displayContent() {
$this->layout->displayContent();
}
public function display() {
$this->renderTemplatePart('Admin');
}
/**
* @return string
*/
public function getClass() {
$this->classes = array_unique($this->classes);
return implode(' ', $this->classes);
}
/**
* @param array $classes
*/
public function addClasses($classes) {
$this->classes += $classes;
}
/**
* @return string
*/
public function getHeader() {
return $this->header;
}
/**
* @param string $header
*/
public function setHeader($header) {
$this->header = $header;
}
/**
* @return string
*/
public function getSubNavigation() {
return $this->subNavigation;
}
/**
* @param string $subNavigation
*/
public function setSubNavigation($subNavigation) {
$this->subNavigation = $subNavigation;
}
public function displayTopBar() {
echo $this->topBar;
}
/**
* @param string $topBar
*/
public function setTopBar($topBar) {
$this->topBar = $topBar;
}
/**
* @param string $content
*/
public function setContent($content) {
$this->content = $content;
}
public function setAttribute($name, $value) {
$this->attributes[$name] = $value;
}
public function renderAttributes() {
echo Html::renderAttributes($this->attributes + array(
'id' => $this->id,
'class' => implode(' ',
$this->classes)
));
}
}PK9e�[-�Qű�?Application/Admin/Layout/Block/Core/AdminEditor/AdminEditor.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\AdminEditor;
use Nextend\Framework\Notification\Notification;
use Nextend\Framework\Plugin;
use Nextend\SmartSlider3\Settings;
use Nextend\SmartSlider3\SmartSlider3Info;
/**
* @var $this BlockAdminEditor
*/
SmartSlider3Info::initLicense();
if (intval(Settings::get('force-rtl-backend', 0))) {
?>
<script>
jQuery(document).ready(function () {
jQuery("html").attr("dir",
"rtl");
});
</script>
<?php
}
?>
<div <?php $this->renderAttributes(); ?>>
<?php $this->displayEditorOverlay(); ?>
<div class="n2_admin_editor__content">
<div class="n2_admin_editor__content_inner"
dir="ltr">
<?php $this->displayContent(); ?>
</div>
</div>
<?php
Plugin::doAction('afterApplicationContent');
?>
</div>
<?php
Notification::show();PK9e�[�r4�bbDApplication/Admin/Layout/Block/Core/AdminEditor/BlockAdminEditor.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\AdminEditor;
use Nextend\Framework\View\AbstractBlock;
use Nextend\Framework\View\Html;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slide\EditorOverlay\BlockEditorOverlay;
use Nextend\SmartSlider3\Application\Admin\Layout\LayoutEditor;
class BlockAdminEditor extends AbstractBlock {
/**
* @var LayoutEditor
*/
protected $layout;
protected $id = 'n2-admin';
protected $classes = array(
'n2',
'n2_admin',
'n2_admin_ui',
'n2_admin_editor',
'fitvidsignore'
);
protected $attributes = array();
/**
* @var BlockEditorOverlay
*/
protected $editorOverlay;
/**
* @param LayoutEditor $layout
*/
public function setLayout($layout) {
$this->layout = $layout;
}
public function displayContent() {
$this->layout->displayContent();
}
public function display() {
$this->renderTemplatePart('AdminEditor');
}
public function setAttribute($name, $value) {
$this->attributes[$name] = $value;
}
public function renderAttributes() {
echo Html::renderAttributes($this->attributes + array(
'id' => $this->id,
'class' => implode(' ',
$this->classes)
));
}
public function displayEditorOverlay() {
$this->editorOverlay->display();
}
/**
* @param BlockEditorOverlay $editorOverlay
*/
public function setEditorOverlay($editorOverlay) {
$this->editorOverlay = $editorOverlay;
}
}PK9e�[?6����=Application/Admin/Layout/Block/Core/AdminEmpty/AdminEmpty.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\AdminEmpty;
use Nextend\SmartSlider3\Settings;
/**
* @var $this BlockAdminEmpty
*/
if (intval(Settings::get('force-rtl-backend', 0))) {
?>
<script>
jQuery(document).ready(function () {
jQuery("html").attr("dir",
"rtl");
});
</script>
<?php
}
?>
<div <?php $this->renderAttributes(); ?>>
<?php $this->displayContent(); ?>
</div>PK9e�[��We11BApplication/Admin/Layout/Block/Core/AdminEmpty/BlockAdminEmpty.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\AdminEmpty;
use Nextend\Framework\View\AbstractBlock;
use Nextend\Framework\View\AbstractLayout;
use Nextend\Framework\View\Html;
class BlockAdminEmpty extends AbstractBlock {
/**
* @var AbstractLayout
*/
protected $layout;
protected $id = 'n2-admin';
protected $classes = array(
'n2',
'n2_admin',
'n2_admin_ui',
'n2_admin--empty',
'fitvidsignore'
);
protected $attributes = array();
/**
* @param AbstractLayout $layout
*/
public function setLayout($layout) {
$this->layout = $layout;
}
public function displayContent() {
$this->layout->displayContent();
}
public function display() {
$this->renderTemplatePart('AdminEmpty');
}
public function renderAttributes() {
echo Html::renderAttributes($this->attributes + array(
'id' => $this->id,
'class' => implode(' ',
$this->classes)
));
}
}PK9e�[>�8�jj=Application/Admin/Layout/Block/Core/AdminError/AdminError.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\AdminError;
/**
* @var $this BlockAdminError
*/
?>
<div style="margin: 20px;width: 500px;border: 2px solid
#1D81F9;background-color: #FFFFFF;border-radius: 5px;padding: 40px
50px;">
<div style="font-size: 18px;line-height: 28px;font-weight:
bold;color: #283F4D;">
<?php
echo $this->getTitle();
?>
</div>
<div style="font-size: 14px;line-height: 24px;color:
#325C77;">
<?php
echo $this->getContent();
?>
</div>
<?php if ($this->hasUrl()): ?>
<div style="margin-top: 10px;">
<a href="<?php echo $this->getUrl(); ?>"
target="_blank" style="font-size: 14px;line-height:
24px;color: #1375E9;text-decoration: none;text-transform:
capitalize"><?php n2_e('Read more'); ?></a>
</div>
<?php endif; ?>
</div>PK9e�[�1"��BApplication/Admin/Layout/Block/Core/AdminError/BlockAdminError.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\AdminError;
use Nextend\Framework\View\AbstractBlock;
use Nextend\Framework\View\AbstractLayout;
class BlockAdminError extends AbstractBlock {
/**
* @var AbstractLayout
*/
protected $layout;
protected $title, $content, $url = '';
/**
* @param AbstractLayout $layout
*/
public function setLayout($layout) {
$this->layout = $layout;
}
public function setError($title, $content, $url = '') {
$this->title = $title;
$this->content = $content;
$this->url = $url;
}
public function displayContent() {
$this->layout->displayContent();
}
public function display() {
$this->renderTemplatePart('AdminError');
}
/**
* @return string
*/
public function getTitle() {
return $this->title;
}
/**
* @return string
*/
public function getContent() {
return $this->content;
}
/**
* @return bool
*/
public function hasUrl() {
return !empty($this->url);
}
/**
* @return string
*/
public function getUrl() {
return $this->url;
}
}PK9e�[�����?Application/Admin/Layout/Block/Core/AdminIframe/AdminIframe.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\AdminIframe;
use Nextend\SmartSlider3\Settings;
/**
* @var $this BlockAdminIframe
*/
if (intval(Settings::get('force-rtl-backend', 0))) {
?>
<script>
jQuery(document).ready(function () {
jQuery("html").attr("dir",
"rtl");
});
</script>
<?php
}
?>
<div <?php $this->renderAttributes(); ?>>
<div class="n2_iframe_application__nav_bar">
<div class="n2_iframe_application__nav_bar_label">
<?php echo $this->getLabel(); ?>
</div>
<div
class="n2_iframe_application__nav_bar_actions">
<?php
foreach ($this->getActions() AS $action) {
$action->display();
}
?>
</div>
</div>
<div class="n2_iframe_application__content">
<?php $this->displayContent(); ?>
</div>
</div>PK9e�[(��))DApplication/Admin/Layout/Block/Core/AdminIframe/BlockAdminIframe.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\AdminIframe;
use Nextend\Framework\View\AbstractBlock;
use Nextend\Framework\View\AbstractLayout;
use Nextend\Framework\View\Html;
class BlockAdminIframe extends AbstractBlock {
/**
* @var AbstractLayout
*/
protected $layout;
protected $id = 'n2-admin';
protected $classes = array(
'n2',
'n2_admin',
'n2_admin_ui',
'n2_iframe_application',
'fitvidsignore'
);
protected $attributes = array();
protected $label = '';
/**
* @var AbstractBlock[]
*/
protected $actions = array();
/**
* @param AbstractLayout $layout
*/
public function setLayout($layout) {
$this->layout = $layout;
}
public function displayContent() {
$this->layout->displayContent();
}
public function display() {
$this->renderTemplatePart('AdminIframe');
}
/**
* @return string
*/
public function getLabel() {
return $this->label;
}
/**
* @param string $label
*/
public function setLabel($label) {
$this->label = $label;
}
/**
* @return AbstractBlock[]
*/
public function getActions() {
return $this->actions;
}
/**
* @param AbstractBlock[] $actions
*/
public function setActions($actions) {
$this->actions = $actions;
}
/**
* @return string
*/
public function getClass() {
$this->classes = array_unique($this->classes);
return implode(' ', $this->classes);
}
/**
* @param array $classes
*/
public function addClasses($classes) {
$this->classes += $classes;
}
public function setAttribute($name, $value) {
$this->attributes[$name] = $value;
}
public function renderAttributes() {
echo Html::renderAttributes($this->attributes + array(
'id' => $this->id,
'class' => implode(' ',
$this->classes)
));
}
}PK9e�[�_$���5Application/Admin/Layout/Block/Core/Banner/Banner.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\Banner;
/**
* @var $this BlockBanner
*/
$closeUrl = $this->getCloseUrl();
?>
<div id="<?php echo $this->getID(); ?>"
class="n2_admin__banner">
<div class="n2_admin__banner_inner">
<img src="<?php echo $this->getImage(); ?>"
alt="">
<div class="n2_admin__banner_inner_title"><?php
echo $this->getTitle(); ?></div>
<div
class="n2_admin__banner_inner_description"><?php echo
$this->getDescription(); ?></div>
<a class="n2_admin__banner_inner_button n2_button
n2_button--big n2_button--green"
href="<?php echo $this->getButtonHref(); ?>"
onclick="<?php echo $this->getButtonOnclick();
?>"
target="_blank">
<?php echo $this->getButtonTitle(); ?>
</a>
</div>
<?php if (!empty($closeUrl)): ?>
<div class="n2_admin__banner_close">
<i class="ssi_16 ssi_16--remove"></i>
</div>
<script>
_N2.r(['$', 'documentReady'], function () {
var $ = _N2.$;
var $banner = $('#<?php echo $this->getID();
?>');
$banner.find('.n2_admin__banner_close').on('click',
function (e) {
e.preventDefault();
_N2.AjaxHelper.ajax({url: <?php echo
json_encode($closeUrl); ?>});
$banner.remove();
});
});
</script>
<?php endif; ?>
</div>PK9e�[1QA A :Application/Admin/Layout/Block/Core/Banner/BlockBanner.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\Banner;
use Nextend\Framework\View\AbstractBlock;
class BlockBanner extends AbstractBlock {
protected $id = '';
protected $image = 'ssi_64 ssi_64--dummy';
protected $title = '';
protected $description = '';
protected $buttonTitle = '';
protected $buttonHref = '#';
protected $buttonOnclick = '';
protected $closeUrl = '';
public function display() {
$this->renderTemplatePart('Banner');
}
/**
* @return string
*/
public function getID() {
return $this->id;
}
/**
* @param $id
*/
public function setID($id) {
$this->id = $id;
}
/**
* @return string
*/
public function getImage() {
return $this->image;
}
/**
* @param $image
*/
public function setImage($image) {
$this->image = $image;
}
/**
* @return string
*/
public function getTitle() {
return $this->title;
}
/**
* @param $title
*/
public function setTitle($title) {
$this->title = $title;
}
/**
* @return string
*/
public function getDescription() {
return $this->description;
}
/**
* @param $description
*/
public function setDescription($description) {
$this->description = $description;
}
/**
* @return string
*/
public function getCloseUrl() {
return $this->closeUrl;
}
/**
* @param $closeUrl
*/
public function setCloseUrl($closeUrl) {
$this->closeUrl = $closeUrl;
}
/**
* @return string
*/
public function getButtonTitle() {
return $this->buttonTitle;
}
/**
* @return string
*/
public function getButtonHref() {
return $this->buttonHref;
}
/**
* @return string
*/
public function getButtonOnclick() {
return $this->buttonOnclick;
}
/**
* @param $button
*/
public function setButton($button) {
$this->buttonTitle = $button['title'];
if (isset($button['href'])) {
$this->buttonHref = $button['href'];
}
if (isset($button['onclick'])) {
$this->buttonOnclick = $button['onclick'];
}
}
}PK9e�[�E�$$BApplication/Admin/Layout/Block/Core/Banner/BlockBannerActivate.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\Banner;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
class BlockBannerActivate extends BlockBanner {
protected function init() {
$this->setID('n2-ss-activate-license-banner');
$this->setImage(ResourceTranslator::toUrl('$ss3-admin$/images/activate.svg'));
$this->setTitle(n2_('Activate Smart Slider 3 Pro'));
$this->setDescription(n2_('Activation is required to unlock
all features!') . ' ' . n2_('Register Smart Slider 3
Pro on this domain to enable auto update, slider templates and slide
library.'));
$this->setButton(array(
'title' => n2_('Activate'),
'onclick' =>
'_N2.License.get().startActivation();return false;'
));
}
}PK9e�[|�s__GApplication/Admin/Layout/Block/Core/BlockBreadCrumb/BlockBreadCrumb.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\BlockBreadCrumb;
use Nextend\Framework\View\AbstractBlock;
use Nextend\SmartSlider3\Application\Admin\Layout\Helper\Breadcrumb;
class BlockBreadCrumb extends AbstractBlock {
/**
* @var Breadcrumb[]
*/
protected $breadCrumbs = array();
public function display() {
$this->renderTemplatePart('BreadCrumb');
}
/**
* @return Breadcrumb[]
*/
public function getBreadCrumbs() {
/**
* If there is no activate item in the menu or in the breadcrumb,
mark the last breadcrumb as active.
*/
if (!$this->hasActiveItem()) {
$this->breadCrumbs[count($this->breadCrumbs) -
1]->setIsActive(true);
}
return $this->breadCrumbs;
}
/**
* @param $label
* @param $icon
* @param string $url
*
* @return Breadcrumb
*/
public function addBreadcrumb($label, $icon, $url = '#') {
$breadCrumb = new Breadcrumb($label, $icon, $url);
$this->breadCrumbs[] = $breadCrumb;
return $breadCrumb;
}
private function hasActiveItem() {
foreach ($this->breadCrumbs AS $breadCrumb) {
if ($breadCrumb->isActive()) {
return true;
}
}
return false;
}
}PK9e�[I����BApplication/Admin/Layout/Block/Core/BlockBreadCrumb/BreadCrumb.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\BlockBreadCrumb;
/**
* @var $this BlockBreadCrumb
*/
?>
<div class="n2_breadcrumbs">
<?php
$breadcrumbs = $this->getBreadCrumbs();
$length = count($breadcrumbs);
foreach ($breadcrumbs AS $i => $breadcrumb):
?>
<div class="n2_breadcrumbs__breadcrumb<?php echo
$breadcrumb->isActive() ? '
n2_breadcrumbs__breadcrumb--active' : '';
?>"><?php $breadcrumb->display(); ?></div>
<?php
if ($i < $length - 1):
?>
<div class="n2_breadcrumbs__arrow"><i
class="ssi_16 ssi_16--breadcrumb"></i></div>
<?php
endif;
?>
<?php
endforeach;
?>
</div>
PK9e�[H��B::JApplication/Admin/Layout/Block/Core/ContentSidebar/BlockContentSidebar.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\ContentSidebar;
use Nextend\Framework\View\AbstractBlock;
class BlockContentSidebar extends AbstractBlock {
protected $sidebar = '';
protected $content = '';
public function display() {
$this->renderTemplatePart('ContentSidebar');
}
/**
* @return string
*/
public function getSidebar() {
return $this->sidebar;
}
/**
* @param string $sidebar
*/
public function setSidebar($sidebar) {
$this->sidebar = $sidebar;
}
/**
* @return string
*/
public function getContent() {
return $this->content;
}
/**
* @param string $content
*/
public function setContent($content) {
$this->content = $content;
}
}PK9e�[�����EApplication/Admin/Layout/Block/Core/ContentSidebar/ContentSidebar.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\ContentSidebar;
/**
* @var $this BlockContentSidebar
*/
?>
<div class="n2-admin-content-with-sidebar">
<div class="n2-admin-content-with-sidebar__sidebar">
<?php
echo $this->getSidebar();
?>
</div>
<div class="n2-admin-content-with-sidebar__content">
<?php
echo $this->getContent();
?>
</div>
</div>PK9e�[�Tgb��:Application/Admin/Layout/Block/Core/Header/BlockHeader.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\Header;
use Nextend\Framework\View\AbstractBlock;
class BlockHeader extends AbstractBlock {
protected $heading = '';
protected $headingAfter = '';
protected $actions = array();
/**
* @var MenuItem[]
*/
protected $menuItems = array();
public function display() {
$this->renderTemplatePart('Header');
}
/**
* @return string
*/
public function getHeading() {
return $this->heading;
}
/**
* @param string $heading
*/
public function setHeading($heading) {
$this->heading = $heading;
}
/**
* @return string
*/
public function getHeadingAfter() {
return $this->headingAfter;
}
public function hasHeadingAfter() {
return !empty($this->headingAfter);
}
/**
* @param string $headingAfter
*/
public function setHeadingAfter($headingAfter) {
$this->headingAfter = $headingAfter;
}
/**
* @return array
*/
public function getActions() {
return $this->actions;
}
public function hasActions() {
return !empty($this->actions);
}
/**
* @param string $action
*/
public function addAction($action) {
$this->actions[] = $action;
}
/**
* @return MenuItem[]
*/
public function getMenuItems() {
return $this->menuItems;
}
public function hasMenuItems() {
return !empty($this->menuItems);
}
/**
* @param MenuItem $menuItem
*/
public function addMenuItem($menuItem) {
$this->menuItems[] = $menuItem;
}
}PK9e�[�#ꖿ�5Application/Admin/Layout/Block/Core/Header/Header.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\Header;
/**
* @var $this BlockHeader
*/
?>
<div class="n2_header<?php echo $this->hasMenuItems() ?
' n2_header--has-menu-items' : ''; ?>">
<div class="n2_header__content">
<div class="n2_header__heading_container">
<div class="n2_header__heading">
<div class="n2_header__heading_primary">
<?php
echo $this->getHeading();
?>
</div>
<?php
if ($this->hasHeadingAfter()):
?>
<div class="n2_header__heading_after">
<?php
echo $this->getHeadingAfter();
?>
</div>
<?php
endif;
?>
</div>
</div>
<?php
if ($this->hasActions()):
?>
<div class="n2_header__actions">
<?php
echo implode('', $this->getActions());
?>
</div>
<?php
endif;
?>
</div>
<?php
if ($this->hasMenuItems()):
?>
<div class="n2_header__menu">
<?php
foreach ($this->getMenuItems() AS $menuItem) {
$menuItem->display();
}
?>
</div>
<?php
endif;
?>
</div>
PK9e�[��2n��7Application/Admin/Layout/Block/Core/Header/MenuItem.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\Header;
use Nextend\Framework\View\Html;
class MenuItem {
protected $isActive = false;
protected $label = '';
protected $url = '#';
protected $classes = array(
'n2_header__menu_item'
);
protected $attributes = array();
public function __construct($label) {
$this->label = $label;
}
public function getHtml() {
$attributes = $this->attributes;
if ($this->isActive) {
$this->classes[] = 'n2_header__menu_item--active';
}
if (!empty($this->classes)) {
$attributes['class'] = implode(' ',
array_unique($this->classes));
}
return Html::link($this->label, $this->url, $attributes);
}
public function display() {
echo $this->getHtml();
}
/**
* @return bool
*/
public function isActive() {
return $this->isActive;
}
/**
* @param bool $isActive
*/
public function setActive($isActive) {
$this->isActive = $isActive;
}
/**
* @return string
*/
public function getLabel() {
return $this->label;
}
/**
* @param string $label
*/
public function setLabel($label) {
$this->label = $label;
}
/**
* @return string
*/
public function getUrl() {
return $this->url;
}
/**
* @param string $url
*/
public function setUrl($url) {
$this->url = $url;
}
public function addClass($className) {
$this->classes[] = $className;
}
public function setAttribute($name, $value) {
$this->attributes[$name] = $value;
}
}PK9e�[/����:Application/Admin/Layout/Block/Core/NavBar/BlockNavBar.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\NavBar;
use Nextend\Framework\View\AbstractBlock;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\BlockBreadCrumb\BlockBreadCrumb;
use Nextend\SmartSlider3\Application\Admin\Layout\Helper\Breadcrumb;
use Nextend\SmartSlider3\Application\Admin\Layout\Helper\MenuItem;
class BlockNavBar extends AbstractBlock {
protected $sidebarLink = '';
protected $logo = '';
/**
* @var MenuItem[]
*/
protected $menuItems = array();
/**
* @var BlockBreadCrumb
*/
protected $blockBreadCrumb;
public function display() {
$this->renderTemplatePart('NavBar');
}
protected function init() {
$this->blockBreadCrumb = new BlockBreadCrumb($this);
}
/**
* @return string
*/
public function getSidebarLink() {
return $this->sidebarLink;
}
/**
* @param string $sidebarLink
*/
public function setSidebarLink($sidebarLink) {
$this->sidebarLink = $sidebarLink;
}
/**
* @return string
*/
public function getLogo() {
return $this->logo;
}
/**
* @param string $logo
*/
public function setLogo($logo) {
$this->logo = $logo;
}
/**
* @return MenuItem[]
*/
public function getMenuItems() {
return $this->menuItems;
}
/**
* @param string $menuItem
* @param bool $isActive
*/
public function addMenuItem($menuItem, $isActive = false) {
$this->menuItems[] = new MenuItem($menuItem, $isActive);
}
/**
* @param $label
* @param $icon
* @param string $url
*
* @return Breadcrumb
*/
public function addBreadcrumb($label, $icon, $url = '#') {
return $this->blockBreadCrumb->addBreadcrumb($label, $icon,
$url);
}
public function displayBreadCrumbs() {
$this->blockBreadCrumb->display();
}
}PK9e�[�h���5Application/Admin/Layout/Block/Core/NavBar/NavBar.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\NavBar;
/**
* @var $this BlockNavBar
*/
?>
<div class="n2_nav_bar">
<?php $this->displayBreadCrumbs(); ?>
<div class="n2_nav_bar__logo">
<a href="<?php echo $this->getSidebarLink();
?>" tabindex="-1">
<?php echo $this->getLogo(); ?>
</a>
</div>
<div class="n2_nav_bar__menu">
<?php
foreach ($this->getMenuItems() AS $menuItem):
?>
<div class="n2_nav_bar__menuitem<?php echo
$menuItem->isActive() ? ' n2_nav_bar__menuitem--active' :
''; ?>"><?php $menuItem->display();
?></div>
<?php
endforeach;
?>
</div>
</div>
PK9e�[���/ffDApplication/Admin/Layout/Block/Core/TopBarGroup/BlockTopBarGroup.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\TopBarGroup;
use Nextend\Framework\View\AbstractBlock;
class BlockTopBarGroup extends AbstractBlock {
/**
* @var AbstractBlock[]
*/
protected $blocks = array();
protected $classes = array('n2_top_bar_group');
public function display() {
$this->renderTemplatePart('TopBarGroup');
}
/**
* @param AbstractBlock $block
*/
public function addBlock($block) {
$this->blocks[] = $block;
}
public function displayBlocks() {
foreach ($this->blocks AS $block) {
$block->display();
}
}
public function setNarrow() {
$this->classes[] = 'n2_top_bar_group--narrow';
}
/**
* @return array
*/
public function getClasses() {
return $this->classes;
}
}PK9e�[PF��77?Application/Admin/Layout/Block/Core/TopBarGroup/TopBarGroup.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\TopBarGroup;
/**
* @var $this BlockTopBarGroup
*/
?>
<div class="<?php echo implode(' ',
$this->getClasses()); ?>">
<div class="n2_top_bar_group__inner">
<?php
$this->displayBlocks();
?>
</div>
</div>
PK9e�[�Y��BApplication/Admin/Layout/Block/Core/TopBarMain/BlockTopBarMain.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\TopBarMain;
use Nextend\Framework\View\AbstractBlock;
class BlockTopBarMain extends AbstractBlock {
private static $idCounter = 1;
protected $id = 0;
/**
* @var AbstractBlock[]
*/
protected $primaryBlocks = array();
/**
* @var AbstractBlock[]
*/
protected $secondaryBlocks = array();
protected $content = '';
protected function init() {
$this->id = self::$idCounter++;
parent::init();
}
public function display() {
$this->renderTemplatePart('TopBarMain');
}
public function addPrimaryBlock($block) {
$this->primaryBlocks[] = $block;
}
public function displayPrimary() {
foreach ($this->primaryBlocks AS $block) {
$block->display();
}
}
public function addSecondaryBlock($block) {
$this->secondaryBlocks[] = $block;
}
public function displaySecondary() {
foreach ($this->secondaryBlocks AS $block) {
$block->display();
}
}
public function getID() {
return 'n2_top_bar_main_' . $this->id;
}
}PK9e�[�~Gyy=Application/Admin/Layout/Block/Core/TopBarMain/TopBarMain.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\TopBarMain;
/**
* @var $this BlockTopBarMain
*/
?>
<script>
_N2.r(['$', 'documentReady'], function () {
var $ = _N2.$;
$('#<?php echo $this->getID();
?>').css('top', _N2.Window.getTopOffset() +
'px');
});
</script>
<div id="<?php echo $this->getID(); ?>"
class="n2_admin__top_bar n2_top_bar_main">
<div class="n2_top_bar_main__primary">
<?php
$this->displayPrimary();
?>
</div>
<div class="n2_top_bar_main__secondary">
<?php
$this->displaySecondary();
?>
</div>
</div>PK9e�[,?���YApplication/Admin/Layout/Block/Core/TopBarMain/TopBarMainEditor/BlockTopBarMainEditor.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\TopBarMain\TopBarMainEditor;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\TopBarMain\BlockTopBarMain;
use Nextend\SmartSlider3\Application\Admin\TraitAdminUrl;
class BlockTopBarMainEditor extends BlockTopBarMain {
use TraitAdminUrl;
public function display() {
$this->renderTemplatePart('TopBarMainEditor');
}
}PK9e�[�T�8��TApplication/Admin/Layout/Block/Core/TopBarMain/TopBarMainEditor/TopBarMainEditor.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\TopBarMain\TopBarMainEditor;
/**
* @var $this BlockTopBarMainEditor
*/
?>
<div id="<?php echo $this->getID(); ?>"
class="n2_admin__top_bar n2_top_bar_main
n2_admin_editor_overlay__top_bar_main">
<div class="n2_top_bar_main__primary">
<?php
$this->displayPrimary();
?>
</div>
<div class="n2_top_bar_main__logo">
<a href="<?php echo $this->getUrlDashboard();
?>">
<?php echo $this->getApplicationType()
->getLogo(); ?>
</a>
</div>
<div class="n2_top_bar_main__secondary">
<?php
$this->displaySecondary();
?>
</div>
</div>
PK9e�[Cz��llMApplication/Admin/Layout/Block/Dashboard/DashboardInfo/BlockDashboardInfo.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Dashboard\DashboardInfo;
use Nextend\Framework\View\AbstractBlock;
use Nextend\SmartSlider3\Application\Admin\TraitAdminUrl;
class BlockDashboardInfo extends AbstractBlock {
use TraitAdminUrl;
public function display() {
$this->renderTemplatePart('DashboardInfo');
}
}PK9e�[�W{_��HApplication/Admin/Layout/Block/Dashboard/DashboardInfo/DashboardInfo.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Dashboard\DashboardInfo;
use Nextend\Framework\Asset\Js\Js;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButtonDashboardInfo;
use Nextend\SmartSlider3\SmartSlider3Info;
/**
* @var $this BlockDashboardInfo
*/
Js::addInline('new _N2.DashboardInfo();');
?>
<div class="n2_dashboard_info">
<?php
$info = new BlockButtonDashboardInfo($this);
$info->display();
?>
<div class="n2_dashboard_info__content">
<div class="n2_dashboard_info__row_icon
n2_dashboard_info__row_icon_version">
<i class="ssi_24
ssi_24--circularinfo"></i>
</div>
<div class="n2_dashboard_info__row_content
n2_dashboard_info__row_content_version">
Smart Slider
<?php
echo SmartSlider3Info::$version . '-' .
SmartSlider3Info::$plan;
?>
</div>
<div class="n2_dashboard_info__row_action
n2_dashboard_info__row_action_version">
<a target="_blank"
href="https://smartslider.helpscoutdocs.com/article/1746-changelog"><?php
n2_e('Changelog') ?></a>
</div>
<?php
$this->getRouter()
->setMultiSite();
$checkForUpdateUrl = $this->getUrlUpdateDownload();
$this->getRouter()
->unSetMultiSite();
?>
<div class="n2_dashboard_info__row_icon
n2_dashboard_info__row_icon_check_update">
<i class="ssi_24 ssi_24--refresh"></i>
</div>
<div class="n2_dashboard_info__row_content
n2_dashboard_info__row_content_check_update">
<?php n2_e('Check for update'); ?>
</div>
<div class="n2_dashboard_info__row_action
n2_dashboard_info__row_action_check_update">
<a target="_blank" href="<?php echo
$checkForUpdateUrl; ?>"><?php n2_e('Check')
?></a>
</div>
<?php
?>
<div class="n2_dashboard_info__row_icon
n2_dashboard_info__row_icon_activated">
<i class="ssi_24 ssi_24--active"></i>
</div>
<div class="n2_dashboard_info__row_content
n2_dashboard_info__row_content_activated">
<?php n2_e('Your license is active'); ?>
</div>
<div class="n2_dashboard_info__row_action
n2_dashboard_info__row_action_activated">
<a href="<?php echo
$this->getUrlDeauthorizeLicense(); ?>"><?php
n2_e('Deactivate license') ?></a>
</div>
<div class="n2_dashboard_info__row_icon
n2_dashboard_info__row_icon_activate">
<i class="ssi_24 ssi_24--attention"></i>
</div>
<div class="n2_dashboard_info__row_content
n2_dashboard_info__row_content_activate">
<?php n2_e('Activate your license'); ?>
</div>
<div class="n2_dashboard_info__row_action
n2_dashboard_info__row_action_activate">
<a onclick="_N2.License.get().startActivation();return
false;" href="#"><?php n2_e('Activate')
?></a>
</div>
<?php
?>
</div>
</div>
<?php
PK9e�[�E�-$$SApplication/Admin/Layout/Block/Dashboard/DashboardManager/BlockDashboardManager.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Dashboard\DashboardManager;
use Nextend\Framework\View\AbstractBlock;
class BlockDashboardManager extends AbstractBlock {
public function display() {
$this->renderTemplatePart('DashboardManager');
}
}PK9e�[��*`))\Application/Admin/Layout/Block/Dashboard/DashboardManager/Boxes/BlockDashboardNewsletter.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Dashboard\DashboardManager\Boxes;
use Nextend\Framework\Model\StorageSectionManager;
use Nextend\Framework\View\AbstractBlock;
class BlockDashboardNewsletter extends AbstractBlock {
public function display() {
$storage =
StorageSectionManager::getStorage('smartslider');
if (!$storage->get('free',
'subscribeOnImport') &&
!$storage->get('free',
'dismissNewsletterDashboard')) {
$this->renderTemplatePart('DashboardNewsletter');
}
}
}PK9e�[|LS���XApplication/Admin/Layout/Block/Dashboard/DashboardManager/Boxes/BlockDashboardReview.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Dashboard\DashboardManager\Boxes;
use Nextend\Framework\Model\StorageSectionManager;
use Nextend\Framework\View\AbstractBlock;
use Nextend\SmartSlider3\Application\Model\ModelSliders;
class BlockDashboardReview extends AbstractBlock {
public function display() {
if (!StorageSectionManager::getStorage('smartslider')
->get('free',
'rated')) {
$modelSliders = new ModelSliders($this);
if ($modelSliders->getSlidersCount() >= 3) {
$this->renderTemplatePart('DashboardReview');
}
}
}
}PK9e�[�K�ii\Application/Admin/Layout/Block/Dashboard/DashboardManager/Boxes/BlockDashboardUpgradePro.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Dashboard\DashboardManager\Boxes;
use Nextend\Framework\Model\StorageSectionManager;
use Nextend\Framework\View\AbstractBlock;
class BlockDashboardUpgradePro extends AbstractBlock {
protected $hasDismiss = false;
protected $source = 'dashboard-why-upgrade';
public function display() {
}
/**
* @return bool
*/
public function hasDismiss() {
return $this->hasDismiss;
}
/**
* @param bool $hasDismiss
*/
public function setHasDismiss($hasDismiss) {
$this->hasDismiss = $hasDismiss;
}
/**
* @return string
*/
public function getSource() {
return $this->source;
}
/**
* @param string $source
*/
public function setSource($source) {
$this->source = $source;
}
}PK9e�[X�� WApplication/Admin/Layout/Block/Dashboard/DashboardManager/Boxes/DashboardNewsletter.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Dashboard\DashboardManager\Boxes;
use Nextend\Framework\Platform\Platform;
/**
* @var BlockDashboardNewsletter $this
*/
?>
<div class="n2_dashboard_manager_newsletter">
<div class="n2_dashboard_manager_newsletter__logo">
<i class="ssi_48 ssi_48--newsletter"></i>
</div>
<div class="n2_dashboard_manager_newsletter__heading">
<?php n2_e('Don’t miss any update'); ?>
</div>
<div class="n2_dashboard_newsletter__paragraph">
<?php n2_e('Join more than 120,000 subscribers and get
access to the latest slider templates, tips, tutorials and other exclusive
contents directly to your inbox.'); ?>
</div>
<form class="n2_dashboard_newsletter__form">
<input type="hidden" name="<?php echo
strtoupper(Platform::getName()); ?>" value="Yes">
<input type="hidden" name="SOURCE"
value="Smart Slider 3">
<input type="email" name="EMAIL"
value="<?php echo Platform::getUserEmail(); ?>"
placeholder="Email" tabindex="-1">
</form>
<div class="n2_dashboard_manager_newsletter__button">
<?php n2_e('Subscribe'); ?>
</div>
<div class="n2_dashboard_manager_newsletter__close">
<i class="ssi_16 ssi_16--remove"></i>
</div>
</div>
<script>
_N2.r(['$', 'documentReady'], function () {
var $ = _N2.$;
var $box = $('.n2_dashboard_manager_newsletter'),
close = function (e, action) {
_N2.AjaxHelper
.ajax({
type: "POST",
url:
_N2.AjaxHelper.makeAjaxUrl(_N2.AjaxHelper.getAdminUrl('ss3-admin'),
{
nextendcontroller: 'settings',
nextendaction: action ||
'dismissNewsletterDashboard'
}),
dataType: 'json'
});
$box.remove();
},
$form = $('.n2_dashboard_newsletter__form')
.on('submit', function (e) {
e.preventDefault();
_N2.AjaxHelper
.ajax({
type: "POST",
url:
"https://secure.nextendweb.com/mailchimp/subscribe.php",
data: $form.serialize(),
dataType: 'json'
})
.done(function () {
});
close(e, 'subscribed');
});
$('.n2_dashboard_manager_newsletter__button')
.on('click', function () {
$form.trigger("submit");
});
$box.find('.n2_dashboard_manager_newsletter__close')
.on('click', close);
});
</script>PK9e�[R�+++SApplication/Admin/Layout/Block/Dashboard/DashboardManager/Boxes/DashboardReview.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Dashboard\DashboardManager\Boxes;
use Nextend\Framework\Platform\Platform;
use Nextend\SmartSlider3\SmartSlider3Info;
/**
* @var BlockDashboardReview $this
*/
?>
<div class="n2_dashboard_manager_review"
data-star="0">
<div class="n2_dashboard_manager_review__logo">
<i class="ssi_48 ssi_48--review0"></i>
<i class="ssi_48 ssi_48--review1"></i>
<i class="ssi_48 ssi_48--review2"></i>
<i class="ssi_48 ssi_48--review3"></i>
<i class="ssi_48 ssi_48--review4"></i>
<i class="ssi_48 ssi_48--review5"></i>
</div>
<div class="n2_dashboard_manager_review__heading">
<?php n2_e('Let us know how we\'re doing'); ?>
</div>
<div class="n2_dashboard_manager_review__paragraph">
<?php n2_e('If you are happy with Smart Slider 3 and can
take a minute please leave a review. This will help to spread its
popularity and to make this plugin a better one.'); ?>
</div>
<div
class="n2_dashboard_manager_review__star_selector">
<div class="n2_dashboard_manager_review__star"
data-star="1"
data-href="https://smartslider3.com/suggestion/?utm_campaign=<?php
echo SmartSlider3Info::$campaign;
?>&utm_source=dashboard-review-1&utm_medium=smartslider-<?php
echo Platform::getName() . '-' . SmartSlider3Info::$plan;
?>">
<i class="ssi_24 ssi_24--star"></i>
</div>
<div class="n2_dashboard_manager_review__star"
data-star="2"
data-href="https://smartslider3.com/suggestion/?utm_campaign=<?php
echo SmartSlider3Info::$campaign;
?>&utm_source=dashboard-review-2&utm_medium=smartslider-<?php
echo Platform::getName() . '-' . SmartSlider3Info::$plan;
?>">
<i class="ssi_24 ssi_24--star"></i>
</div>
<div class="n2_dashboard_manager_review__star"
data-star="3"
data-href="https://smartslider3.com/satisfied-customer/?utm_campaign=<?php
echo SmartSlider3Info::$campaign;
?>&utm_source=dashboard-review-3&utm_medium=smartslider-<?php
echo Platform::getName() . '-' . SmartSlider3Info::$plan;
?>">
<i class="ssi_24 ssi_24--star"></i>
</div>
<div class="n2_dashboard_manager_review__star"
data-star="4"
data-href="https://smartslider3.com/satisfied-customer/?utm_campaign=<?php
echo SmartSlider3Info::$campaign;
?>&utm_source=dashboard-review-4&utm_medium=smartslider-<?php
echo Platform::getName() . '-' . SmartSlider3Info::$plan;
?>">
<i class="ssi_24 ssi_24--star"></i>
</div>
<?php
$reviewUrl =
'https://smartslider3.com/redirect/joomla-review.html?utm_campaign='
. SmartSlider3Info::$campaign .
'&utm_source=dashboard-review-5&utm_medium=smartslider-'
. Platform::getName() . '-' . SmartSlider3Info::$plan;
?>
<div class="n2_dashboard_manager_review__star"
data-star="5" data-href="<?php echo $reviewUrl;
?>">
<i class="ssi_24
ssi_24--star"></i></div>
</div>
<div class="n2_dashboard_manager_review__label"
data-star="0"><?php n2_e('Rate your experience');
?></div>
<div class="n2_dashboard_manager_review__label"
data-star="1"><?php n2_e('Hated it');
?></div>
<div class="n2_dashboard_manager_review__label"
data-star="2"><?php n2_e('Disliked it');
?></div>
<div class="n2_dashboard_manager_review__label"
data-star="3"><?php n2_e('It was ok');
?></div>
<div class="n2_dashboard_manager_review__label"
data-star="4"><?php n2_e('Liked it');
?></div>
<div class="n2_dashboard_manager_review__label"
data-star="5"><?php n2_e('Loved it');
?></div>
<div class="n2_dashboard_manager_review__close">
<i class="ssi_16 ssi_16--remove"></i>
</div>
</div>
<script>
_N2.r(['$', 'documentReady'], function () {
var $ = _N2.$;
var $box = $('.n2_dashboard_manager_review'),
close = function () {
_N2.AjaxHelper
.ajax({
type: "POST",
url:
_N2.AjaxHelper.makeAjaxUrl(_N2.AjaxHelper.getAdminUrl('ss3-admin'),
{
nextendcontroller: 'settings',
nextendaction: 'rated'
}),
dataType: 'json'
});
$box.remove();
};
$('.n2_dashboard_manager_review__star')
.on({
mouseenter: function (e) {
$box.attr('data-star',
$(e.currentTarget).data('star'));
},
mouseleave: function () {
$box.attr('data-star', 0);
},
click: function (e) {
window.open($(e.currentTarget).data('href'),
'_blank');
close();
}
});
$box.find('.n2_dashboard_manager_review__close')
.on('click', close);
});
</script>PK9e�[�<�_aaWApplication/Admin/Layout/Block/Dashboard/DashboardManager/Boxes/DashboardUpgradePro.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Dashboard\DashboardManager\Boxes;
use Nextend\SmartSlider3\SmartSlider3Info;
/**
* @var BlockDashboardUpgradePro $this
*/
?>
<div class="n2_dashboard_manager_upgrade_pro">
<div
class="n2_dashboard_manager_upgrade_pro__logo">
<i class="ssi_48 ssi_48--upgrade"></i>
</div>
<div
class="n2_dashboard_manager_upgrade_pro__heading">
<?php n2_e('Why upgrade to Smart Slider 3 Pro?');
?>
</div>
<div
class="n2_dashboard_manager_upgrade_pro__details">
<a target="_blank" href="<?php echo
SmartSlider3Info::decorateExternalUrl('https://smartslider3.com/sample-sliders/',
array('utm_source' => $this->getSource() .
'-sample-sliders')); ?>"
class="n2_dashboard_manager_upgrade_pro__details_option">
<i class="ssi_16
ssi_16--filledcheck"></i>
<div
class="n2_dashboard_manager_upgrade_pro__details_option_label"><?php
n2_e('120+ slider templates'); ?></div>
</a>
<a target="_blank" href="<?php echo
SmartSlider3Info::decorateExternalUrl('https://smartslider3.com/slide-library/',
array('utm_source' => $this->getSource() .
'-slide-library')); ?>"
class="n2_dashboard_manager_upgrade_pro__details_option">
<i class="ssi_16
ssi_16--filledcheck"></i>
<div
class="n2_dashboard_manager_upgrade_pro__details_option_label"><?php
n2_e('Full slide library access'); ?></div>
</a>
<a target="_blank" href="<?php echo
SmartSlider3Info::decorateExternalUrl('https://smartslider3.com/layers/',
array('utm_source' => $this->getSource() .
'-layers')); ?>"
class="n2_dashboard_manager_upgrade_pro__details_option">
<i class="ssi_16
ssi_16--filledcheck"></i>
<div
class="n2_dashboard_manager_upgrade_pro__details_option_label"><?php
n2_e('20 new layers'); ?></div>
</a>
<a target="_blank" href="<?php echo
SmartSlider3Info::decorateExternalUrl('https://smartslider3.com/features/',
array('utm_source' => $this->getSource() .
'-free-pro')); ?>"
class="n2_dashboard_manager_upgrade_pro__details_option">
<i class="ssi_16
ssi_16--filledcheck"></i>
<div
class="n2_dashboard_manager_upgrade_pro__details_option_label"><?php
n2_e('Extra advanced options'); ?></div>
</a>
<a target="_blank" href="<?php echo
SmartSlider3Info::decorateExternalUrl('https://smartslider3.com/animations-and-effects/',
array('utm_source' => $this->getSource() .
'-animations')); ?>"
class="n2_dashboard_manager_upgrade_pro__details_option">
<i class="ssi_16
ssi_16--filledcheck"></i>
<div
class="n2_dashboard_manager_upgrade_pro__details_option_label"><?php
n2_e('New animations & effects'); ?></div>
</a>
<a target="_blank" href="<?php echo
SmartSlider3Info::decorateExternalUrl('https://smartslider3.com/help/',
array('utm_source' => $this->getSource() .
'-support')); ?>"
class="n2_dashboard_manager_upgrade_pro__details_option">
<i class="ssi_16
ssi_16--filledcheck"></i>
<div
class="n2_dashboard_manager_upgrade_pro__details_option_label"><?php
n2_e('Lifetime update & support'); ?></div>
</a>
</div>
<a href="<?php echo
SmartSlider3Info::getWhyProUrl(array('utm_source' =>
$this->getSource())); ?>" target="_blank"
class="n2_dashboard_manager_upgrade_pro__button">
<?php n2_e('Upgrade to Pro'); ?>
</a>
<?php
if ($this->hasDismiss()):
?>
<div
class="n2_dashboard_manager_upgrade_pro__close">
<i class="ssi_16 ssi_16--remove"></i>
</div>
<?php
endif;
?>
</div>
<?php
if ($this->hasDismiss()):
?>
<script>
_N2.r(['$', 'documentReady'], function () {
var $ = _N2.$;
var $box = $('.n2_dashboard_manager_upgrade_pro'),
close = function () {
_N2.AjaxHelper
.ajax({
type: "POST",
url:
_N2.AjaxHelper.makeAjaxUrl(_N2.AjaxHelper.getAdminUrl('ss3-admin'),
{
nextendcontroller: 'settings',
nextendaction:
'dismissupgradepro'
}),
dataType: 'json'
});
$box.remove();
};
$box.find('.n2_dashboard_manager_upgrade_pro__close')
.on('click', close);
});
</script>
<?php
endif;
?>PK9e�[��m�NApplication/Admin/Layout/Block/Dashboard/DashboardManager/DashboardManager.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Dashboard\DashboardManager;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Dashboard\DashboardManager\Boxes\BlockDashboardNewsletter;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Dashboard\DashboardManager\Boxes\BlockDashboardReview;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Dashboard\DashboardManager\Boxes\BlockDashboardUpgradePro;
/**
* @var BlockDashboardManager $this
*/
?>
<div class="n2_dashboard_manager">
<div class="n2_dashboard_manager__content">
<?php
$review = new BlockDashboardReview($this);
$review->display();
$newsletter = new BlockDashboardNewsletter($this);
$newsletter->display();
?>
</div>
</div>
PK9e�[��Df44>Application/Admin/Layout/Block/Forms/Button/AbstractButton.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button;
use Nextend\Framework\View\AbstractBlock;
use Nextend\Framework\View\Html;
abstract class AbstractButton extends AbstractBlock {
protected $url = '#';
protected $attributes = array();
protected $classes = array();
protected $baseClass = '';
protected $size = 'medium';
protected $tabindex = 0;
public function display() {
echo Html::link($this->getContent(), $this->getUrl(),
$this->getAttributes());
}
abstract protected function getContent();
/**
* @return string
*/
public function getUrl() {
return $this->url;
}
/**
* @param string $url
*/
public function setUrl($url) {
$this->url = $url;
}
/**
* @param $className
*/
public function addClass($className) {
$this->classes[] = $className;
}
public function addAttribute($name, $value) {
$this->attributes[$name] = $value;
}
public function getAttributes() {
$classes = array_merge(array($this->baseClass),
$this->getClasses());
return $this->attributes + array('class' =>
implode(' ', $classes));
}
/**
* @param string $target
*/
public function setTarget($target) {
$this->addAttribute('target', $target);
}
/**
* @return array
*/
public function getClasses() {
$classes = $this->classes;
$classes[] = $this->baseClass . '--' . $this->size;
return $classes;
}
public function setSmall() {
$this->size = 'small';
}
public function setMedium() {
$this->size = 'medium';
}
public function setBig() {
$this->size = 'big';
}
/**
* @param integer $tabIndex
*/
public function setTabIndex($tabIndex) {
$this->tabindex = $tabIndex;
if ($this->tabindex === 0) {
unset($this->attributes['tabindex']);
} else {
$this->attributes['tabindex'] =
$this->tabindex;
}
}
}PK9e�[�yw�33CApplication/Admin/Layout/Block/Forms/Button/AbstractButtonLabel.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button;
class AbstractButtonLabel extends AbstractButton {
protected $label = '';
protected $icon = '';
protected function getContent() {
$content = '<span class="' . $this->baseClass
. '__label">' . $this->getLabel() .
'</span>';
if (!empty($this->icon)) {
$content .= '<i class="' . $this->icon .
'"></i>';
}
return $content;
}
/**
* @return string
*/
public function getLabel() {
return $this->label;
}
/**
* @param string $label
*/
public function setLabel($label) {
$this->label = $label;
}
/**
* @param string $icon
*/
public function setIcon($icon) {
$this->icon = $icon;
}
}PK9e�[�>�P��;Application/Admin/Layout/Block/Forms/Button/BlockButton.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button;
class BlockButton extends AbstractButtonLabel {
protected $baseClass = 'n2_button';
protected $color = 'blue';
public function setBlue() {
$this->color = 'blue';
}
public function setGreen() {
$this->color = 'green';
}
public function setRed() {
$this->color = 'red';
}
public function setGrey() {
$this->color = 'grey';
}
public function setGreyDark() {
$this->color = 'grey-dark';
}
public function getClasses() {
$classes = parent::getClasses();
$classes[] = $this->baseClass . '--' .
$this->color;
return $classes;
}
}PK9e�[fE��@Application/Admin/Layout/Block/Forms/Button/BlockButtonApply.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button;
class BlockButtonApply extends BlockButton {
protected function init() {
parent::init();
$this->setLabel(n2_('Apply'));
$this->setBig();
$this->setGreen();
}
}PK9e�[sf�V
?Application/Admin/Layout/Block/Forms/Button/BlockButtonBack.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button;
class BlockButtonBack extends BlockButton {
protected function init() {
parent::init();
$this->setLabel(n2_('Back'));
$this->setBig();
$this->setGreyDark();
}
}PK9e�[ߵ��AApplication/Admin/Layout/Block/Forms/Button/BlockButtonCancel.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button;
class BlockButtonCancel extends BlockButton {
protected function init() {
parent::init();
$this->setLabel(n2_('Cancel'));
$this->setBig();
$this->setRed();
}
}PK9e�[�k$�HApplication/Admin/Layout/Block/Forms/Button/BlockButtonDashboardInfo.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button;
class BlockButtonDashboardInfo extends BlockButtonPlainIcon {
protected $baseClass = 'n2_button_plain_icon';
protected $icon = 'ssi_24 ssi_24--notification';
protected $size = 'big';
protected function init() {
parent::init();
$this->setTabIndex(-1);
}
protected function getContent() {
return '<i class="' . $this->icon .
'"></i><div
class="n2_dashboard_info__marker"></div>';
}
}PK9e�[c�/��?Application/Admin/Layout/Block/Forms/Button/BlockButtonIcon.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button;
class BlockButtonIcon extends BlockButtonPlainIcon {
protected $baseClass = 'n2_button_icon';
protected $color = 'grey';
public function setBlue() {
$this->color = 'blue';
}
public function setGreen() {
$this->color = 'green';
}
public function setRed() {
$this->color = 'red';
}
public function setGrey() {
$this->color = 'grey';
}
public function setGreyDark() {
$this->color = 'grey-dark';
}
public function getClasses() {
$classes = parent::getClasses();
$classes[] = $this->baseClass . '--' .
$this->color;
return $classes;
}
}PK9e�[�V����CApplication/Admin/Layout/Block/Forms/Button/BlockButtonIconCode.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button;
class BlockButtonIconCode extends BlockButtonIcon {
protected function getContent() {
return $this->icon;
}
}PK9e�[�Z
H!!AApplication/Admin/Layout/Block/Forms/Button/BlockButtonImport.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button;
class BlockButtonImport extends BlockButton {
protected function init() {
parent::init();
$this->setLabel(n2_('Import'));
$this->setBig();
$this->setGreen();
}
}PK9e�[�@7�++@Application/Admin/Layout/Block/Forms/Button/BlockButtonPlain.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button;
class BlockButtonPlain extends AbstractButtonLabel {
protected $baseClass = 'n2_button_plain';
protected $color = '';
public function setColorBlue() {
$this->color = 'blue';
}
/**
* @return array
*/
public function getClasses() {
$classes = parent::getClasses();
if (!empty($this->color)) {
$classes[] = $this->baseClass . '--color-' .
$this->color;
}
return $classes;
}
}PK9e�[O��r��DApplication/Admin/Layout/Block/Forms/Button/BlockButtonPlainIcon.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button;
class BlockButtonPlainIcon extends AbstractButton {
protected $baseClass = 'n2_button_plain_icon';
protected $icon = '';
protected function getContent() {
return '<i class="' . $this->icon .
'"></i>';
}
/**
* @param string $icon
*/
public function setIcon($icon) {
$this->icon = $icon;
}
}PK9e�[���?Application/Admin/Layout/Block/Forms/Button/BlockButtonSave.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button;
class BlockButtonSave extends BlockButton {
protected function init() {
parent::init();
$this->setLabel(n2_('Save'));
$this->setBig();
$this->setGreen();
}
}PK9e�[��N�[[AApplication/Admin/Layout/Block/Forms/Button/BlockButtonSpacer.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button;
use Nextend\Framework\View\AbstractBlock;
class BlockButtonSpacer extends AbstractBlock {
protected $isVisible = false;
public function display() {
$classes = array('n2_button_spacer');
if ($this->isVisible) {
$classes[] = 'n2_button_spacer--visible';
}
echo '<div class="' . implode(' ',
$classes) . '"></div>';
}
/**
* @param bool $isVisible
*/
public function setIsVisible($isVisible) {
$this->isVisible = $isVisible;
}
}PK9e�[�:��
�
GApplication/Admin/Layout/Block/Forms/FloatingMenu/BlockFloatingMenu.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\FloatingMenu;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\View\AbstractBlock;
use Nextend\Framework\View\Html;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\AbstractButton;
class BlockFloatingMenu extends AbstractBlock {
/**
* @var AbstractButton
*/
protected $button;
protected $classes = array(
'n2_popover',
'n2_floating_menu'
);
protected $attributes = array();
/**
* @var AbstractBlock[]
*/
protected $menuItems = array();
protected $contentID;
public function display() {
$this->renderTemplatePart('FloatingMenu');
}
public function displayButton() {
$this->button->display();
}
/**
* @param AbstractButton $button
*/
public function setButton($button) {
$button->setTabIndex(-1);
$button->addClass('n2_floating_menu__button
n2_popover__trigger');
$this->button = $button;
}
/**
* @param AbstractBlock $item
*/
public function addMenuItem($item) {
$this->menuItems[] = $item;
}
public function addSeparator($classes = array()) {
$separator = new BlockFloatingMenuItemSeparator($this);
$separator->setclasses($classes);
$this->menuItems[] = $separator;
}
/**
* @return AbstractBlock[]
*/
public function getMenuItems() {
return $this->menuItems;
}
public function addClass($className) {
$this->classes[] = $className;
}
public function getClasses() {
return $this->classes;
}
/**
* @return mixed
*/
public function getContentID() {
return $this->contentID;
}
/**
* @param mixed $contentID
*/
public function setContentID($contentID) {
$this->contentID = $contentID;
}
public function renderAttributes() {
echo Html::renderAttributes($this->attributes + array(
'class' => implode(' ',
$this->classes)
));
}
public function setAttribute($name, $value) {
$this->attributes[$name] = $value;
}
public function setLeft() {
$this->setAttribute('data-horizontal',
'left');
}
public function setRight() {
$this->setAttribute('data-horizontal',
'right');
}
public function setAbove() {
$this->setAttribute('data-vertical',
'above');
}
public function setBelow() {
$this->setAttribute('data-vertical',
'below');
}
public function setRelatedClass($selector) {
$this->setAttribute('data-relatedclass', $selector);
}
}
Js::addInline('_N2.r(\'$\', function ()
{_N2.$(".n2_floating_menu").nextendPopover();});');PK9e�[����KApplication/Admin/Layout/Block/Forms/FloatingMenu/BlockFloatingMenuItem.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\FloatingMenu;
use Nextend\Framework\View\AbstractBlock;
use Nextend\Framework\View\Html;
class BlockFloatingMenuItem extends AbstractBlock {
protected $label = '';
protected $url = '#';
protected $icon = '';
protected $isActive = false;
protected $attributes = array();
protected $classes = array(
'n2_floating_menu__item'
);
protected $color = 'grey';
public function display() {
$label = '';
if (!empty($this->icon)) {
$label .= '<i class="' . $this->icon .
'"></i>';
}
$label .= '<div
class="n2_floating_menu__item_label">' . $this->label
. '</div>';
echo Html::link($label, $this->url, $this->attributes +
array('class' => implode(' ',
$this->getClasses())));
}
/**
* @param string $label
*/
public function setLabel($label) {
$this->label = $label;
}
/**
* @param string $url
*/
public function setUrl($url) {
$this->url = $url;
}
/**
* @param string $icon
*/
public function setIcon($icon) {
$this->icon = $icon;
}
/**
* @param bool $isActive
*/
public function setIsActive($isActive) {
$this->isActive = $isActive;
}
public function addAttribute($name, $value) {
$this->attributes[$name] = $value;
}
public function addClass($className) {
$this->classes[] = $className;
}
/**
* @param string $target
*/
public function setTarget($target) {
$this->addAttribute('target', $target);
}
public function setRed() {
$this->color = 'red';
}
public function setGrey() {
$this->color = 'grey';
}
public function getClasses() {
$classes = $this->classes;
if ($this->isActive) {
$classes[] = 'n2_floating_menu__item--active';
}
$classes[] = 'n2_floating_menu__item--' .
$this->color;
return $classes;
}
public function setState($state) {
$this->attributes['data-state'] = $state;
}
public function setStayOpen() {
$this->addAttribute('data-stay-open', 1);
}
}PK9e�[b��11TApplication/Admin/Layout/Block/Forms/FloatingMenu/BlockFloatingMenuItemSeparator.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\FloatingMenu;
use Nextend\Framework\View\AbstractBlock;
class BlockFloatingMenuItemSeparator extends AbstractBlock {
protected $classes = array();
public function display() {
echo '<div class="' . implode(' ',
array_merge(array(
'n2_floating_menu__item_separator'
), $this->classes)) . '"></div>';
}
/**
* @param array $classes
*/
public function setClasses($classes) {
$this->classes = $classes;
}
}PK9e�[ڏ���BApplication/Admin/Layout/Block/Forms/FloatingMenu/FloatingMenu.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\FloatingMenu;
/**
* @var BlockFloatingMenu $this
*/
?>
<div <?php $this->renderAttributes(); ?>>
<?php
$this->displayButton();
$contentID = $this->getContentID();
?>
<div <?php if (!empty($contentID)): ?>id="<?php echo
$this->getContentID(); ?>"<?php endif; ?>
class="n2_popover_content n2_floating_menu__items_container">
<div class="n2_popover_content_exit"></div>
<div class="n2_popover_content_inner
n2_floating_menu__items">
<?php
foreach ($this->getMenuItems() AS $menuItem) {
$menuItem->display();
}
?>
</div>
</div>
</div>PK9e�[8Z�چ � KApplication/Admin/Layout/Block/Generator/GeneratorBox/BlockGeneratorBox.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Generator\GeneratorBox;
use Nextend\Framework\View\AbstractBlock;
class BlockGeneratorBox extends AbstractBlock {
protected $label = '';
protected $buttonLink = '';
protected $buttonLinkTarget = '';
protected $buttonLabel = '';
protected $description = '';
protected $docsLink = '';
/** @var string */
protected $imageUrl;
public function display() {
$this->renderTemplatePart('GeneratorBox');
}
/**
* @return string
*/
public function getLabel() {
return $this->label;
}
/**
* @param string $label
*/
public function setLabel($label) {
$this->label = $label;
}
/**
* @return string
*/
public function getDescription() {
return $this->description;
}
/**
* @param string $description
*/
public function setDescription($description) {
$this->description = $description;
}
/**
* @param string
*/
public function getDocsLink() {
return $this->docsLink;
}
/**
* @param string $link
*/
public function setDocsLink($link) {
$this->docsLink = $link;
}
/**
* @return string
*/
public function getButtonLink() {
return $this->buttonLink;
}
/**
* @param string $buttonLink
*/
public function setButtonLink($buttonLink) {
$this->buttonLink = $buttonLink;
}
/**
* @return string
*/
public function getButtonLabel() {
return $this->buttonLabel;
}
/**
* @param string $buttonLabel
*/
public function setButtonLabel($buttonLabel) {
$this->buttonLabel = $buttonLabel;
}
public function hasButtonLabel() {
return !empty($this->buttonLabel);
}
/**
* @return string
*/
public function getButtonLinkTarget() {
return $this->buttonLinkTarget;
}
/**
* @param string $buttonLinkTarget
*/
public function setButtonLinkTarget($buttonLinkTarget) {
$this->buttonLinkTarget = $buttonLinkTarget;
}
/**
* @return string
*/
public function getImageUrl() {
return $this->imageUrl;
}
/**
* @param string $imageUrl
*/
public function setImageUrl($imageUrl) {
$this->imageUrl = $imageUrl;
}
}PK9e�[�9�}��FApplication/Admin/Layout/Block/Generator/GeneratorBox/GeneratorBox.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Generator\GeneratorBox;
/**
* @var $this BlockGeneratorBox
*/
?>
<div class="n2_slide_generator_box"
style="background-image: url('<?php echo
$this->getImageUrl(); ?>');">
<div class="n2_slide_generator_box__title">
<div class="n2_slide_generator_box__title_label">
<div
class="n2_slide_generator_box__title_label_inner">
<?php
$label = $this->getLabel();
echo $label;
?>
</div>
<i class="ssi_16 ssi_16--info"
data-tip-description="<?php echo $this->getDescription();
?>" data-tip-label="<?php echo $label; ?>"
data-tip-link="<?php echo $this->getDocsLink();
?>"></i>
</div>
<a href="<?php echo $this->getButtonLink();
?>" target="<?php echo $this->getButtonLinkTarget();
?>" class="n2_slide_generator_box__title_button">
<?php echo $this->getButtonLabel(); ?>
</a>
</div>
</div>PK9e�[nD]���:Application/Admin/Layout/Block/Slide/AddLayer/AddLayer.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slide\AddLayer;
use Nextend\Framework\View\Html;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\FreeNeedMore\BlockFreeNeedMore;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButtonIconCode;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButtonPlainIcon;
/**
* @var $this BlockAddLayer
*/
?>
<div class="n2_add_layer">
<div class="n2_add_layer__bar">
<div class="n2_add_layer__bar_top">
<?php
$buttonAddLayer = new BlockButtonIconCode($this);
$buttonAddLayer->addClass('n2_add_layer__bar_button');
$buttonAddLayer->addClass('n2_add_layer__bar_button_add');
$buttonAddLayer->setIcon('<svg
xmlns="http://www.w3.org/2000/svg" width="24"
height="24"><path fill="currentColor" d="M13
3a1 1 0 0 1 1 1v6h6a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-6v6a1 1 0 0 1-1 1h-2a1 1
0 0 1-1-1v-6H4a1 1 0 0 1-1-1v-2a1 1 0 0 1 1-1h6V4a1 1 0 0 1
1-1h2z"/></svg>');
$buttonAddLayer->setGreen();
$buttonAddLayer->addAttribute('data-n2tip',
n2_('Add Layer'));
$buttonAddLayer->display();
$this->displayAddShortcut('heading', 'ssi_24
ssi_24--heading', n2_('Heading'));
$this->displayAddShortcut('text', 'ssi_24
ssi_24--text', n2_('Text'));
$this->displayAddShortcut('image', 'ssi_24
ssi_24--image', n2_('Image'));
$this->displayAddShortcut('button', 'ssi_24
ssi_24--button', n2_('Button'));
$this->displayAddShortcut('structure-2col',
'ssi_24 ssi_24--col2', n2_('Row'));
?>
</div>
<div class="n2_add_layer__bar_bottom">
<?php
$buttonPlay = new BlockButtonPlainIcon($this);
$buttonPlay->addClass('n2_timeline_control_play_pause');
$buttonPlay->addClass('n2_add_layer__bar_button');
$buttonPlay->setIcon('ssi_24 ssi_24--play');
$buttonPlay->addAttribute('data-n2tip',
n2_('Play animations'));
$buttonPlay->addAttribute('data-n2tipv', -20);
$buttonPlay->display();
$buttonTimeline = new BlockButtonPlainIcon($this);
$buttonTimeline->addClass('n2_add_layer__bar_button');
$buttonTimeline->addClass('n2_slide_editor_timeline_toggle
n2_slide_editor_timeline_toggle--show');
$buttonTimeline->setIcon('ssi_24
ssi_24--timeline');
$buttonTimeline->addAttribute('data-n2tip',
n2_('Timeline'));
$buttonTimeline->addAttribute('data-n2tipv', -20);
$buttonTimeline->display();
?>
</div>
</div>
<div class="n2_add_layer__more n2_form--dark">
<div class="n2_add_layer__more_tab_buttons">
<div class="n2_add_layer__more_tab_button"
data-related-tab="layers">
<div
class="n2_add_layer__more_tab_button_icon">
<i class="ssi_24
ssi_24--layers"></i>
</div>
<div
class="n2_add_layer__more_tab_button_label">
<?php echo n2_('Layers'); ?>
</div>
</div>
<div class="n2_add_layer__more_tab_button"
data-related-tab="library">
<div
class="n2_add_layer__more_tab_button_icon">
<i class="ssi_24
ssi_24--smart"></i>
</div>
<div
class="n2_add_layer__more_tab_button_label">
<?php echo n2_('Library'); ?>
</div>
</div>
</div>
<div class="n2_add_layer__more_tab"
data-tab="layers">
<div class="n2_add_layer__more_layers">
<?php
foreach ($this->getGroups() AS $groupLabel =>
$boxes):
?>
<div class="n2_add_layer_group">
<div
class="n2_add_layer_group__label">
<?php echo $groupLabel; ?>
</div>
<div
class="n2_add_layer_group__content">
<?php
foreach ($boxes AS $box):
echo Html::openTag('div', array(
'class' =>
'n2_add_layer_box'
) + $box['attributes']);
?>
<div
class="n2_add_layer_box__icon">
<i class="<?php echo
$box['icon'] ?>"></i>
</div>
<div
class="n2_add_layer_box__label_wrap">
<div
class="n2_add_layer_box__label">
<?php echo
$box['label']; ?>
</div>
</div>
<?php
echo Html::closeTag('div');
endforeach;
?>
</div>
</div>
<?php
endforeach;
?>
<?php
?>
</div>
<div class="n2_add_layer__more_position
n2_add_layer_position" data-position="default">
<div class="n2_add_layer_position__label
n2_add_layer_position__default_label">
<?php n2_e('Default'); ?>
</div>
<div
class="n2_add_layer_position__switch_container">
<div
class="n2_add_layer_position__switch">
<div
class="n2_add_layer_position__switch_dot">
</div>
</div>
</div>
<div class=" n2_add_layer_position__label
n2_add_layer_position__absolute_label">
<?php n2_e('Absolute'); ?>
</div>
</div>
</div>
<div class="n2_add_layer__more_tab
n2_add_layer_library" data-tab="library">
</div>
</div>
</div>
PK9e�[�Ի�WW?Application/Admin/Layout/Block/Slide/AddLayer/BlockAddLayer.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slide\AddLayer;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\Plugin;
use Nextend\Framework\Style\ModelCss;
use Nextend\Framework\View\AbstractBlock;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButtonPlainIcon;
use Nextend\SmartSlider3\Renderable\Item\ItemFactory;
use Nextend\SmartSlider3\Slider\SliderType\SliderTypeFactory;
class BlockAddLayer extends AbstractBlock {
protected $groups = array();
protected $sliderType = '';
public function display() {
$this->groups[n2_x('Basic', 'Layer group')]
= array(
array(
'label' => n2_('Row'),
'icon' => 'ssi_32
ssi_32--col2',
'attributes' => array(
'data-item' => 'structure-2col'
)
)
);
$cssModel = new ModelCss($this);
$itemDefaults = SliderTypeFactory::getType($this->sliderType)
->getItemDefaults();
foreach (ItemFactory::getItemGroups() AS $groupLabel => $group)
{
foreach ($group AS $type => $item) {
if (!$item->isLegacy()) {
if (!isset($this->groups[$groupLabel])) {
$this->groups[$groupLabel] = array();
}
$visualKey = 'ss3item' . $type;
$visuals = $cssModel->getVisuals($visualKey);
Plugin::doAction($visualKey . 'Storage',
array(
&$visuals
));
Js::addInline('window["' . $visualKey .
'"] = ' . json_encode($visuals) . ';');
$this->groups[$groupLabel][] = array(
'label' => $item->getTitle(),
'icon' => $item->getIcon(),
'attributes' => array(
'data-item' => $type,
'data-layerproperties' =>
json_encode((object)array_merge($item->getLayerProperties(),
$itemDefaults))
)
);
}
}
}
$this->renderTemplatePart('AddLayer');
}
/**
* @return array
*/
public function getGroups() {
return $this->groups;
}
/**
* @param string $sliderType
*/
public function setSliderType($sliderType) {
$this->sliderType = $sliderType;
}
public function displayAddShortcut($type, $icon, $label) {
$button = new BlockButtonPlainIcon($this);
$button->addClass('n2_add_layer__bar_button');
$button->setIcon($icon);
$button->addAttribute('data-add-layer-shortcut',
$type);
$button->addAttribute('data-n2tip', $label);
$button->display();
}
}PK9e�[:
�� � IApplication/Admin/Layout/Block/Slide/EditorOverlay/BlockEditorOverlay.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slide\EditorOverlay;
use Nextend\Framework\View\AbstractBlock;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\BlockBreadCrumb\BlockBreadCrumb;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\TopBarMain\TopBarMainEditor\BlockTopBarMainEditor;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slide\AddLayer\BlockAddLayer;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slide\SlideManager\BlockSlideManager;
class BlockEditorOverlay extends AbstractBlock {
/**
* @var BlockTopBarMainEditor
*/
protected $topBar;
/**
* @var BlockBreadCrumb
*/
protected $blockBreadCrumb;
/**
* @var BlockSlideManager
*/
protected $slideManager;
/**
* @var BlockAddLayer
*/
protected $blockAddLayer;
/**
* @var string
*/
protected $contentLayerWindow;
protected function init() {
$this->topBar = new BlockTopBarMainEditor($this);
$this->blockBreadCrumb = new BlockBreadCrumb($this);
$this->topBar->addSecondaryBlock($this->blockBreadCrumb);
}
public function display() {
$this->renderTemplatePart('EditorOverlay');
}
/**
* @param BlockSlideManager $slideManager
*/
public function setSlideManager($slideManager) {
$this->slideManager = $slideManager;
$slideManager->addClass('n2_admin_editor__ui_slide_manager');
}
public function displaySlideManager() {
$this->slideManager->display();
}
/**
* @return BlockTopBarMainEditor
*/
public function getTopBar() {
return $this->topBar;
}
public function displayTopBar() {
$this->topBar->display();
}
/**
* @return BlockBreadCrumb
*/
public function getBlockBreadCrumb() {
return $this->blockBreadCrumb;
}
/**
* @param BlockAddLayer $blockAddLayer
*/
public function setBlockAddLayer($blockAddLayer) {
$this->blockAddLayer = $blockAddLayer;
}
public function displayBlockAddLayer() {
$this->blockAddLayer->display();
}
/**
* @param string $contentLayerWindow
*/
public function setContentLayerWindow($contentLayerWindow) {
$this->contentLayerWindow = $contentLayerWindow;
}
public function displayBlockLayerWindow() {
echo $this->contentLayerWindow;
}
}PK9e�[P_�c}}DApplication/Admin/Layout/Block/Slide/EditorOverlay/EditorOverlay.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slide\EditorOverlay;
/**
* @var $this BlockEditorOverlay
*/
?>
<div class="n2_admin_editor_overlay">
<div class="n2_admin_editor_overlay__top">
<?php $this->displayTopBar(); ?>
</div>
<div class="n2_admin_editor_overlay__middle">
<?php $this->displayBlockAddLayer(); ?>
<div
class="n2_admin_editor_overlay__middle_center">
<div class="n2_ruler_corner"></div>
<div class="n2_ruler n2_ruler--vertical">
<div class="n2_ruler__inner">
</div>
</div>
<div class="n2_ruler n2_ruler--horizontal">
<div class="n2_ruler__inner">
</div>
</div>
</div>
</div>
<?php $this->displayBlockLayerWindow(); ?>
<?php $this->displaySlideManager(); ?>
</div>
PK9e�[ҭ?���EApplication/Admin/Layout/Block/Slide/LayerWindow/BlockLayerWindow.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slide\LayerWindow;
use Nextend\Framework\View\AbstractBlock;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slide\LayerWindow\Settings\AbstractLayerWindowSettings;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slide\LayerWindow\Settings\LayerWindowSettingsColumn;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slide\LayerWindow\Settings\LayerWindowSettingsCommon;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slide\LayerWindow\Settings\LayerWindowSettingsContent;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slide\LayerWindow\Settings\LayerWindowSettingsItem;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slide\LayerWindow\Settings\LayerWindowSettingsItemCommon;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slide\LayerWindow\Settings\LayerWindowSettingsRow;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slide\LayerWindow\Settings\LayerWindowSettingsSlide;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slide\LayerWindow\Tab\AbstractTab;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slide\LayerWindow\Tab\TabAnimation;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slide\LayerWindow\Tab\TabContent;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slide\LayerWindow\Tab\TabGoPro;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slide\LayerWindow\Tab\TabStyle;
use Nextend\SmartSlider3\Renderable\Item\ItemFactory;
use Nextend\SmartSlider3\Slider\Admin\AdminSlider;
class BlockLayerWindow extends AbstractBlock {
/**
* @var AdminSlider
*/
protected $renderableAdminSlider;
/**
* @var AbstractTab[]
*/
protected $tabs = array();
/**
* @var AbstractLayerWindowSettings[]
*/
protected $settings = array();
/**
* @param AdminSlider $renderableAdminSlider
*/
public function setRenderableAdminSlider($renderableAdminSlider) {
$this->renderableAdminSlider = $renderableAdminSlider;
}
public function display() {
$this->tabs['content'] = new TabContent($this);
$this->tabs['style'] = new TabStyle($this);
$this->tabs['animation'] = new TabAnimation($this);
$this->settings[] = new LayerWindowSettingsSlide($this,
$this->renderableAdminSlider);
$this->settings[] = new LayerWindowSettingsContent($this);
$this->settings[] = new LayerWindowSettingsRow($this);
$this->settings[] = new LayerWindowSettingsColumn($this);
foreach (ItemFactory::getItems() AS $type => $item) {
$this->settings[] = new LayerWindowSettingsItem($type,
$item, $this, $this->renderableAdminSlider);
}
$this->settings[] = new LayerWindowSettingsItemCommon($this);
$this->settings[] = new LayerWindowSettingsCommon($this);
foreach ($this->settings as $setting) {
$setting->extendForm($this->tabs['content']->getContainer(),
$this->tabs['style']->getContainer());
}
$this->renderTemplatePart('LayerWindow');
}
/**
* @return AbstractTab[]
*/
public function getTabs() {
return $this->tabs;
}
}PK9e�[���8''@Application/Admin/Layout/Block/Slide/LayerWindow/LayerWindow.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slide\LayerWindow;
/**
* @var $this BlockLayerWindow
*/
?>
<div id="n2-ss-layer-window" class="n2_ss_layer_window
n2_form--dark">
<div class="n2_ss_layer_window__crop">
<div class="n2_ss_layer_window__title">
<div class="n2_ss_layer_window__title_nav
n2_ss_layer_window__title_nav_left">
</div>
<div
class="n2_ss_layer_window__title_inner"></div>
<div class="n2_ss_layer_window__title_nav
n2_ss_layer_window__title_nav_right">
</div>
</div>
<div class="n2_ss_layer_window__tab_buttons">
<?php
foreach ($this->getTabs() AS $tab):
?>
<div class="n2_ss_layer_window__tab_button"
data-related-tab="<?php echo $tab->getName(); ?>">
<div
class="n2_ss_layer_window__tab_button_icon">
<i class="<?php echo $tab->getIcon();
?>"></i>
</div>
<div
class="n2_ss_layer_window__tab_button_label">
<?php
echo $tab->getLabel();
?>
</div>
</div>
<?php
endforeach;
?>
</div>
<div class="n2_ss_layer_window__tab_container
n2_container_scrollable">
<?php
foreach ($this->getTabs() AS $tab):
?>
<div class="n2_ss_layer_window__tab"
data-tab="<?php echo $tab->getName(); ?>">
<?php
$tab->display();
?>
</div>
<?php
endforeach;
?>
</div>
<?php
//$this->renderForm();
?>
</div>
</div>PK9e�[�����YApplication/Admin/Layout/Block/Slide/LayerWindow/Settings/AbstractLayerWindowSettings.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slide\LayerWindow\Settings;
use Nextend\Framework\Form\Container\LayerWindow\ContainerSettings;
use Nextend\Framework\Form\ContainerInterface;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slide\LayerWindow\BlockLayerWindow;
abstract class AbstractLayerWindowSettings {
/**
* @var BlockLayerWindow
*/
protected $blockLayerWindow;
/**
* @var ContainerSettings
*/
protected $contentContainer;
/**
* @var ContainerSettings
*/
protected $styleContainer;
/**
* AbstractLayerWindowSettings constructor.
*
* @param BlockLayerWindow $blockLayerWindow
*/
public function __construct($blockLayerWindow) {
$this->blockLayerWindow = $blockLayerWindow;
}
/**
* @return string
*/
abstract public function getName();
/**
* @param ContainerInterface $contentContainer
* @param ContainerInterface $styleContainer
*/
public function extendForm($contentContainer, $styleContainer) {
$this->createContentContainer($contentContainer);
$this->createStyleContainer($styleContainer);
$this->extendContent();
$this->extendStyle();
}
/**
* @param ContainerInterface $container
*/
protected function createContentContainer($container) {
$this->contentContainer = new ContainerSettings($container,
$this->getName());
}
/**
* @param ContainerInterface $container
*/
protected function createStyleContainer($container) {
$this->styleContainer = new ContainerSettings($container,
$this->getName());
}
protected function extendContent() {
}
protected function extendStyle() {
}
}PK9e�[:���WApplication/Admin/Layout/Block/Slide/LayerWindow/Settings/LayerWindowSettingsColumn.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slide\LayerWindow\Settings;
use Nextend\Framework\Form\ContainerInterface;
use Nextend\Framework\Form\Element\Hidden;
use Nextend\Framework\Form\Element\LayerWindowFocus;
use Nextend\Framework\Form\Element\MarginPadding;
use Nextend\Framework\Form\Element\MixedField\BoxShadow;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Select\Gradient;
use Nextend\Framework\Form\Element\Select\LinkTarget;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Element\Text\Color;
use Nextend\Framework\Form\Element\Text\FieldImage;
use Nextend\Framework\Form\Element\Text\HiddenText;
use Nextend\Framework\Form\Element\Text\Number;
use Nextend\Framework\Form\Element\Text\NumberAutoComplete;
use Nextend\Framework\Form\Element\Text\Url;
use
Nextend\Framework\Form\Fieldset\LayerWindow\FieldsetLayerWindowLabelFields;
use
Nextend\Framework\Form\Fieldset\LayerWindow\FieldsetLayerWindowStyleMode;
use Nextend\SmartSlider3\Form\Element\Radio\FlexAlign;
use Nextend\SmartSlider3\Form\Element\Radio\InnerAlign;
class LayerWindowSettingsColumn extends AbstractLayerWindowSettings {
public function getName() {
return 'column';
}
protected function extendContent() {
$general = new
FieldsetLayerWindowLabelFields($this->contentContainer,
'fields-col-general', n2_('General'));
new Hidden($general, 'col-order', '0');
new Hidden($general, 'col-opened', 1);
new Hidden($general, 'col-colwidth', '');
new InnerAlign($general, 'col-inneralign',
n2_('Inner align'), 'inherit', array(
'rowAttributes' => array(
'data-devicespecific' => ''
),
'tipLabel' => n2_('Inner align'),
'tipDescription' => n2_('Positions the layers
inside horizontally.')
));
new FlexAlign($general, 'col-verticalalign',
n2_('Vertical align'), 'center', array(
'rowAttributes' => array(
'data-devicespecific' => ''
),
'tipLabel' => n2_('Vertical
align'),
'tipDescription' => n2_('Positions the layers
inside vertically.')
));
$link = new
FieldsetLayerWindowLabelFields($this->contentContainer,
'fields-col-link', n2_('Link'));
new Url($link, 'col-href', n2_('Link'),
'', array(
'relatedFields' => array(
'layercol-href-target',
'layercol-aria-label'
),
'width' => 248
));
new LinkTarget($link, 'col-href-target', n2_('Target
window'));
new Text($link, 'col-aria-label', n2_('ARIA
label'), '', array(
'style' => 'width:190px;',
'tipLabel' => n2_('ARIA label')
));
}
protected function extendStyle() {
$this->backgroundImage($this->styleContainer);
$this->background($this->styleContainer);
$this->border($this->styleContainer);
$this->size($this->styleContainer);
}
/**
* @param ContainerInterface $container
*/
protected function backgroundImage($container) {
$backgroundImage = new FieldsetLayerWindowLabelFields($container,
'fields-col-background-image', n2_('Background
image'));
$fieldImage = new FieldImage($backgroundImage,
'col-background-image', n2_('Background image'),
'', array(
'width' => 220,
'relatedFields' => array(
'layercol-background-focus'
)
));
$fieldFocusX = new HiddenText($backgroundImage,
'col-background-focus-x', 50);
$fieldFocusY = new HiddenText($backgroundImage,
'col-background-focus-y', 50);
$focusField = new LayerWindowFocus($backgroundImage,
'col-background-focus', n2_('Focus'), array(
'tipLabel' => n2_('Focus'),
'tipDescription' => n2_('You can set the
starting position of a background image. This makes sure that the selected
part will always remain visible, so you should pick the most important
part.')
));
$focusField->setFields($fieldImage, $fieldFocusX, $fieldFocusY);
}
/**
* @param ContainerInterface $container
*/
protected function background($container) {
$background = new FieldsetLayerWindowStyleMode($container,
'fields-col-background', n2_('Background'), array(
'' => 'Normal',
'-hover' => 'Hover'
));
new Color($background, 'col-background-color',
n2_('Background color'), 'ffffff00', array(
'alpha' => true
));
new Gradient($background, 'col-background-gradient',
n2_('Gradient'), 'off', array(
'relatedFields' => array(
'layercol-background-color-end'
)
));
new Color($background, 'col-background-color-end',
n2_('Color end'), 'ffffff00', array(
'alpha' => true
));
new BoxShadow($background, 'col-boxshadow', n2_('Box
shadow'), '0|*|0|*|0|*|0|*|00000080');
}
/**
* @param ContainerInterface $container
*/
protected function border($container) {
$border = new FieldsetLayerWindowStyleMode($container,
'fields-col-border', n2_('Border'), array(
'' => 'Normal',
'-hover' => 'Hover'
));
$borderWidth = new MarginPadding($border,
'col-border-width', n2_('Border'),
'0|*|0|*|0|*|0', array(
'unit' => 'px',
'relatedFields' => array(
'layercol-border-style',
'layercol-border-color'
)
));
for ($i = 1; $i < 5; $i++) {
new NumberAutoComplete($borderWidth,
'col-border-width-' . $i, false, '', array(
'values' => array(
0,
1,
2,
3,
5
),
'wide' => 3
));
}
new Select($border, 'col-border-style',
n2_('Style'), 'none', array(
'options' => array(
'none' => n2_('None'),
'solid' => n2_('Solid'),
'dashed' => n2_('Dashed'),
'dotted' => n2_('Dotted'),
)
));
new Color($border, 'col-border-color',
n2_('Color'), 'ffffffff', array(
'alpha' => true
));
new NumberAutoComplete($border, 'col-border-radius',
n2_('Border radius'), 0, array(
'values' => array(
0,
3,
5,
10,
99
),
'wide' => 3,
'unit' => 'px'
));
}
/**
* @param ContainerInterface $container
*/
protected function size($container) {
$size = new FieldsetLayerWindowLabelFields($container,
'fields-col-size', n2_('Size'));
new Number($size, 'col-maxwidth', n2_('Max
width'), 0, array(
'rowAttributes' => array(
'data-devicespecific' => ''
),
'wide' => 5,
'unit' => 'px'
));
$padding = new MarginPadding($size, 'col-padding',
n2_('Padding'), '5|*|5|*|5|*|5', array(
'rowAttributes' => array(
'data-devicespecific' => ''
)
));
$padding->setUnit('px');
for ($i = 1; $i < 5; $i++) {
new NumberAutoComplete($padding, 'col-padding-' . $i,
false, '', array(
'values' => array(
0,
5,
10,
20,
30
),
'wide' => 3
));
}
}
}PK9e�[Է�-�-WApplication/Admin/Layout/Block/Slide/LayerWindow/Settings/LayerWindowSettingsCommon.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slide\LayerWindow\Settings;
use Nextend\Framework\Form\ContainerInterface;
use Nextend\Framework\Form\Element\Button;
use Nextend\Framework\Form\Element\Devices;
use Nextend\Framework\Form\Element\Grouping;
use Nextend\Framework\Form\Element\Hidden;
use Nextend\Framework\Form\Element\MarginPadding;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Element\Text\Number;
use Nextend\Framework\Form\Element\Text\NumberAutoComplete;
use Nextend\Framework\Form\Element\Text\NumberSlider;
use
Nextend\Framework\Form\Fieldset\LayerWindow\FieldsetLayerWindowLabelFields;
use Nextend\SmartSlider3\Form\Element\Radio\HorizontalAlign;
use Nextend\SmartSlider3\Form\Element\Radio\VerticalAlign;
use Nextend\SmartSlider3Pro\Form\Element\CanvasLayerParentPicker;
class LayerWindowSettingsCommon extends AbstractLayerWindowSettings {
public function getName() {
return 'common';
}
protected function extendStyle() {
$this->responsive($this->styleContainer);
$this->effect($this->styleContainer);
$this->normalPosition($this->styleContainer);
$this->normalSize($this->styleContainer);
$this->absolutePosition($this->styleContainer);
$this->absoluteSize($this->styleContainer);
$this->advanced($this->styleContainer);
}
/**
* @param ContainerInterface $container
*/
protected function normalPosition($container) {
$position = new FieldsetLayerWindowLabelFields($container,
'fields-common-placement-content-position',
n2_('Position'), array(
'attributes' => array(
'data-placement' => 'normal'
)
));
new Select($position, 'position-default',
n2_('Position'), 'default', array(
'options' => array(
'default' => n2_('Default'),
'absolute' => n2_('Absolute')
),
'tipLabel' => n2_('Position'),
'tipDescription' => n2_('The editing mode the
layer is positioned in.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1916-slide-editing-in-smart-slider-3'
));
new HorizontalAlign($position, 'normal-selfalign',
n2_('Align'), 'inherit', array(
'inherit' => true,
'rowAttributes' => array(
'data-devicespecific' => ''
),
'tipLabel' => n2_('Align'),
'tipDescription' => n2_('Positions the layer
horizontally within its parent.')
));
}
/**
* @param ContainerInterface $container
*/
protected function normalSize($container) {
$size = new FieldsetLayerWindowLabelFields($container,
'fields-common-placement-content-size', n2_('Size'),
array(
'attributes' => array(
'data-placement' => 'normal'
)
));
new Number($size, 'normal-maxwidth', n2_('Max
width'), 0, array(
'wide' => 4,
'unit' => 'px',
'min' => 0,
'rowAttributes' => array(
'data-devicespecific' => ''
)
));
new Number($size, 'normal-height',
n2_('Height'), 0, array(
'wide' => 4,
'unit' => 'px',
'rowAttributes' => array(
'data-devicespecific' => ''
),
'tipLabel' => n2_('Height'),
'tipDescription' => n2_('You can set a fix
height for your layer.')
));
$margin = new MarginPadding($size, 'normal-margin',
n2_('Margin'), '0|*|0|*|0|*|0', array(
'rowAttributes' => array(
'data-devicespecific' => 'right'
),
'tipLabel' => n2_('Margin'),
'tipDescription' => n2_('With margins you can
create distance between your layers.')
)); // spacing
$margin->setUnit('px');
for ($i = 1; $i < 5; $i++) {
new NumberAutoComplete($margin, 'normal-margin-' .
$i, false, '', array(
'values' => array(
0,
5,
10,
20,
30
),
'wide' => 3
));
}
}
/**
* @param ContainerInterface $container
*/
protected function absolutePosition($container) {
$position = new FieldsetLayerWindowLabelFields($container,
'fields-common-placement-absolute-position',
n2_('Position'), array(
'attributes' => array(
'data-placement' => 'absolute'
)
));
new Hidden($position, 'adaptive-font', 1);
new Select($position, 'position-absolute',
n2_('Position'), 'absolute', array(
'options' => array(
'default' => n2_('Default'),
'absolute' => n2_('Absolute')
)
));
new HorizontalAlign($position, 'align',
n2_('Align'), 'left', array(
'rowAttributes' => array(
'data-devicespecific' => ''
)
));
new VerticalAlign($position, 'valign', n2_('Vertical
align'), 'top', array(
'rowAttributes' => array(
'data-devicespecific' => ''
)
));
$row2 = new Grouping($position, 'absolute-position-row2',
false);
new Number($row2, 'left', n2_('Left'),
'', array(
'unit' => 'px',
'wide' => 4,
'rowAttributes' => array(
'data-devicespecific' => ''
)
));
new Number($row2, 'top', n2_('Top'),
'', array(
'unit' => 'px',
'wide' => 4,
'rowAttributes' => array(
'data-devicespecific' => ''
)
));
new OnOff($row2, 'responsive-position',
n2_('Responsive'), 1);
$parentPicker = new Grouping($position,
'layer-parent-picker', false);
new CanvasLayerParentPicker($parentPicker, 'parentid',
n2_('Linked to'), '', array(
'rowClass' =>
'n2-layer-picker-container',
'relatedFields' => array(
'layerparentalign',
'layerparentvalign'
),
'tipLabel' => n2_('Linked to'),
'tipDescription' => n2_('You can link your
layer to another layer on the same level. This way your layer won\'t
be positioned to the slide, but the other layer.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1812-layer-style#linked-to'
));
new HorizontalAlign($parentPicker, 'parentalign',
n2_('Horizontal'), 'left', array(
'rowAttributes' => array(
'data-devicespecific' => ''
)
));
new VerticalAlign($parentPicker, 'parentvalign',
n2_('Vertical'), 'top', array(
'rowAttributes' => array(
'data-devicespecific' => ''
)
));
}
/**
* @param ContainerInterface $container
*/
protected function absoluteSize($container) {
$size = new FieldsetLayerWindowLabelFields($container,
'fields-common-placement-absolute-size', n2_('Size'),
array(
'attributes' => array(
'data-placement' => 'absolute'
)
));
new Text($size, 'width', n2_('Width'),
'', array(
'unit' => 'px',
'style' => 'width:32px;',
'rowAttributes' => array(
'data-devicespecific' => ''
)
));
new Text($size, 'height', n2_('Height'),
'', array(
'unit' => 'px',
'style' => 'width:32px;',
'rowAttributes' => array(
'data-devicespecific' => ''
)
));
new OnOff($size, 'responsive-size',
n2_('Responsive'), 1);
}
/**
* @param ContainerInterface $container
*/
protected function responsive($container) {
$responsive = new FieldsetLayerWindowLabelFields($container,
'fields-common-responsive', n2_('Responsive'));
new Text($responsive, 'generator-visible', n2_('Hide
when variable empty'), '', array(
'rowAttributes' => array(
'data-generator-related' => '1'
),
'style' => 'width:280px;'
));
new Devices($responsive, 'show', n2_('Hide
on'));
new NumberSlider($responsive, 'font-size', n2_('Text
scale'), 100, array(
'min' => 10,
'max' => 200,
'step' => 10,
'unit' => '%',
'wide' => 3,
'rowAttributes' => array(
'data-devicespecific' => 'right'
)
));
new Button($responsive, '-clear-device-specific-changes',
n2_('Device specific settings'), n2_('Clear'), array(
'tipLabel' => n2_('Clear device
specific settings'),
'tipDescription' => n2_('Erases all device
specific changes you made on the current device.'),
));
}
/**
* @param ContainerInterface $container
*/
protected function effect($container) {
$effect = new FieldsetLayerWindowLabelFields($container,
'fields-common-effect', n2_('Effect'));
new Select($effect, 'parallax',
n2_('Parallax'), 0, array(
'tipLabel' => n2_('Parallax'),
'tipDescription' => n2_('More parallax
options in slider settings -> Layer animations tab.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1812-layer-style#parallax',
'options' => array(
'0' => n2_('Off'),
'1' => 1,
'2' => 2,
'3' => 3,
'4' => 4,
'5' => 5,
'6' => 6,
'7' => 7,
'8' => 8,
'9' => 9,
'10' => 10
)
));
new Select($effect, 'crop', n2_('Crop'),
'visible', array(
'options' => array(
'visible' => n2_('Off'),
'hidden' => n2_('On'),
'auto' => n2_('Scroll'),
'mask' => n2_('Mask')
),
'tipLabel' => n2_('Crop'),
'tipDescription' => n2_('If your content is
larger than the layer, you can crop it to fit.')
));
new Number($effect, 'rotation',
n2_('Rotation'), 0, array(
'wide' => 3,
'unit' => '°'
));
}
/**
* @param ContainerInterface $container
*/
protected function advanced($container) {
$advanced = new FieldsetLayerWindowLabelFields($container,
'fields-common-advanced', n2_('Advanced'));
new Number($advanced, 'zindex', 'Z Index', 2,
array(
'wide' => 4
));
new Text($advanced, 'class', n2_('CSS Class'),
'', array(
'style' => 'width:220px;',
'tipLabel' => n2_('CSS Class'),
'tipDescription' => n2_('You can add a custom
CSS class on the layer container.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1812-layer-style#css-class',
));
new Hidden($advanced, 'id');
new Hidden($advanced, 'uniqueclass');
}
}PK9e�[u�ekkXApplication/Admin/Layout/Block/Slide/LayerWindow/Settings/LayerWindowSettingsContent.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slide\LayerWindow\Settings;
use Nextend\Framework\Form\ContainerInterface;
use Nextend\Framework\Form\Element\Hidden;
use Nextend\Framework\Form\Element\LayerWindowFocus;
use Nextend\Framework\Form\Element\MarginPadding;
use Nextend\Framework\Form\Element\Select\Gradient;
use Nextend\Framework\Form\Element\Text\Color;
use Nextend\Framework\Form\Element\Text\FieldImage;
use Nextend\Framework\Form\Element\Text\HiddenText;
use Nextend\Framework\Form\Element\Text\Number;
use Nextend\Framework\Form\Element\Text\NumberAutoComplete;
use
Nextend\Framework\Form\Fieldset\LayerWindow\FieldsetLayerWindowLabelFields;
use
Nextend\Framework\Form\Fieldset\LayerWindow\FieldsetLayerWindowStyleMode;
use Nextend\SmartSlider3\Form\Element\Radio\FlexAlign;
use Nextend\SmartSlider3\Form\Element\Radio\HorizontalAlign;
use Nextend\SmartSlider3\Form\Element\Radio\InnerAlign;
class LayerWindowSettingsContent extends AbstractLayerWindowSettings {
public function getName() {
return 'content';
}
protected function extendContent() {
$general = new
FieldsetLayerWindowLabelFields($this->contentContainer,
'fields-content-general', n2_('General'));
new Hidden($general, 'content-opened', 1);
new InnerAlign($general, 'content-inneralign',
n2_('Inner align'), 'inherit', array(
'rowAttributes' => array(
'data-devicespecific' => ''
),
'tipLabel' => n2_('Inner align'),
'tipDescription' => n2_('Positions the layers
inside horizontally.')
));
new FlexAlign($general, 'content-verticalalign',
n2_('Vertical align'), 'center', array(
'rowAttributes' => array(
'data-devicespecific' => ''
),
'tipLabel' => n2_('Vertical
align'),
'tipDescription' => n2_('Positions the layers
inside vertically.')
));
}
protected function extendStyle() {
$this->backgroundImage($this->styleContainer);
$this->background($this->styleContainer);
$this->spacing($this->styleContainer);
$this->position($this->styleContainer);
$this->size($this->styleContainer);
}
/**
* @param ContainerInterface $container
*/
protected function backgroundImage($container) {
$backgroundImage = new FieldsetLayerWindowLabelFields($container,
'fields-content-background-image', n2_('Background
image'));
$fieldImage = new FieldImage($backgroundImage,
'content-background-image', n2_('Background image'),
'', array(
'width' => 220,
'relatedFields' => array(
'layercontent-background-focus'
)
));
$fieldFocusX = new HiddenText($backgroundImage,
'content-background-focus-x', 50);
$fieldFocusY = new HiddenText($backgroundImage,
'content-background-focus-y', 50);
$focusField = new LayerWindowFocus($backgroundImage,
'content-background-focus', n2_('Focus'), array(
'tipLabel' => n2_('Focus'),
'tipDescription' => n2_('You can set the
starting position of a background image. This makes sure that the selected
part will always remain visible, so you should pick the most important
part.')
));
$focusField->setFields($fieldImage, $fieldFocusX, $fieldFocusY);
}
/**
* @param ContainerInterface $container
*/
protected function background($container) {
$background = new FieldsetLayerWindowStyleMode($container,
'fields-content-background', n2_('Content background'),
array(
'' => 'Normal',
'-hover' => 'Hover'
));
new Color($background, 'content-background-color',
n2_('Background color'), 'ffffff00', array(
'alpha' => true
));
new Gradient($background, 'content-background-gradient',
n2_('Gradient'), 'off', array(
'relatedFields' => array(
'layercontent-background-color-end'
)
));
new Color($background, 'content-background-color-end',
n2_('Color end'), 'ffffff00', array(
'alpha' => true
));
}
/**
* @param ContainerInterface $container
*/
protected function spacing($container) {
$spacing = new FieldsetLayerWindowLabelFields($container,
'fields-content-spacing', n2_('Spacing'));
$padding = new MarginPadding($spacing, 'content-padding',
n2_('Padding'), '5|*|5|*|5|*|5', array(
'rowAttributes' => array(
'data-devicespecific' => ''
)
));
$padding->setUnit('px');
for ($i = 1; $i < 5; $i++) {
new NumberAutoComplete($padding, 'content-padding-' .
$i, false, '', array(
'values' => array(
0,
5,
10,
20,
30
),
'wide' => 3
));
}
}
/**
* @param ContainerInterface $container
*/
protected function position($container) {
$position = new FieldsetLayerWindowLabelFields($container,
'fields-content-position', n2_('Position'));
new HorizontalAlign($position, 'content-selfalign',
n2_('Align'), 'center', array(
'inherit' => true,
'rowAttributes' => array(
'data-devicespecific' => ''
)
));
}
/**
* @param ContainerInterface $container
*/
protected function size($container) {
$size = new FieldsetLayerWindowLabelFields($container,
'fields-content-size', n2_('Size'));
new Number($size, 'content-maxwidth', n2_('Max
width'), 0, array(
'rowAttributes' => array(
'data-devicespecific' => ''
),
'unit' => 'px',
'wide' => 5
));
}
}PK9e�[Oi�UApplication/Admin/Layout/Block/Slide/LayerWindow/Settings/LayerWindowSettingsItem.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slide\LayerWindow\Settings;
use Nextend\Framework\Asset\Js\Js;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slide\LayerWindow\BlockLayerWindow;
use Nextend\SmartSlider3\Renderable\Item\AbstractItem;
use Nextend\SmartSlider3\Slider\Admin\AdminSlider;
class LayerWindowSettingsItem extends AbstractLayerWindowSettings {
protected $type;
/**
* @var AbstractItem
*/
protected $item;
/**
* LayerWindowSettingsItem constructor.
*
* @param string $type
* @param AbstractItem $item
* @param BlockLayerWindow $blockLayerWindow
* @param AdminSlider $renderableAdminSlider
*/
public function __construct($type, $item, $blockLayerWindow,
$renderableAdminSlider) {
$this->type = $type;
$this->item = $item;
Js::addGlobalInline('window["itemValues/' .
$this->type . '"]=' . json_encode($item->getValues())
. ';');
$item->loadResources($renderableAdminSlider);
parent::__construct($blockLayerWindow);
}
public function getName() {
return 'item/' . $this->type;
}
protected function createContentContainer($container) {
parent::createContentContainer($container);
$this->contentContainer->setControlName('item_' .
$this->type);
}
protected function createStyleContainer($container) {
parent::createStyleContainer($container);
$this->styleContainer->setControlName('item_' .
$this->type);
}
protected function extendContent() {
$this->item->renderFields($this->contentContainer);
}
protected function extendStyle() {
}
}PK9e�[b���[Application/Admin/Layout/Block/Slide/LayerWindow/Settings/LayerWindowSettingsItemCommon.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slide\LayerWindow\Settings;
use Nextend\Framework\Form\Container\LayerWindow\ContainerDesign;
use Nextend\Framework\Form\Element\Button;
use Nextend\Framework\Form\Element\Decoration;
use Nextend\Framework\Form\Element\MarginPadding;
use Nextend\Framework\Form\Element\MixedField\Border;
use Nextend\Framework\Form\Element\MixedField\BoxShadow;
use Nextend\Framework\Form\Element\MixedField\FontSize;
use Nextend\Framework\Form\Element\MixedField\TextShadow;
use Nextend\Framework\Form\Element\Radio\TextAlign;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Select\FontWeight;
use Nextend\Framework\Form\Element\Text\Color;
use Nextend\Framework\Form\Element\Text\Family;
use Nextend\Framework\Form\Element\Text\NumberAutoComplete;
use Nextend\Framework\Form\Element\Text\NumberSlider;
use Nextend\Framework\Form\Element\Text\TextAutoComplete;
use Nextend\Framework\Form\Element\Textarea;
use Nextend\Framework\Form\Element\Unit;
use Nextend\Framework\Form\Fieldset\LayerWindow\FieldsetDesign;
class LayerWindowSettingsItemCommon extends AbstractLayerWindowSettings {
public function getName() {
return 'item';
}
protected function extendStyle() {
$designContainer = new ContainerDesign($this->styleContainer,
'layer_window_design');
$this->font($designContainer);
$this->style($designContainer);
}
/**
* @param ContainerDesign $container
*/
protected function font($container) {
$font = new FieldsetDesign($container, 'basiccss-font',
n2_('Typography'));
new Family($font, '-font-family',
n2_('Family'), 'Arial, Helvetica', array(
'style' => 'width:168px;',
'tipLabel' => n2_('Family'),
'tipDescription' => n2_('You can select a
font family from the preset, or type your custom family.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1828-using-your-own-fonts',
));
new Color($font, '-font-color', n2_('Color'),
'000000FF', array(
'alpha' => true
));
new FontSize($font, '-font-size', n2_('Size'),
'14|*|px', array(
'tipLabel' => n2_('Size'),
'tipDescription' => n2_('Need to change the
font size device specifically? Use the Text scale option.')
));
new FontWeight($font, '-font-weight', n2_('Font
weight'), '');
new TextAutoComplete($font, '-font-lineheight',
n2_('Line height'), '18px', array(
'values' => array(
'normal',
'1',
'1.2',
'1.5',
'1.8',
'2'
),
'style' => 'width:50px;'
));
new TextAlign($font, '-font-textalign', n2_('Text
align'), 'inherit');
new Decoration($font, '-font-decoration',
n2_('Decoration'));
new Button\ButtonMoreLess($font, '-font-more',
'', array(
'relatedFields' => array(
'layer-font-letterspacing',
'layer-font-wordspacing',
'layer-font-texttransform',
'layer-font-tshadow',
'layer-font-extracss'
)
));
new TextAutoComplete($font, '-font-letterspacing',
n2_('Letter spacing'), 'normal', array(
'values' => array(
'normal',
'1px',
'2px',
'5px',
'10px',
'15px'
),
'style' => 'width:73px;'
));
new TextAutoComplete($font, '-font-wordspacing',
n2_('Word spacing'), 'normal', array(
'values' => array(
'normal',
'2px',
'5px',
'10px',
'15px'
),
'style' => 'width:72px;'
));
new Select($font, '-font-texttransform',
n2_('Transform'), 'none', array(
'options' => array(
'none' => n2_('None'),
'capitalize' => n2_('Capitalize'),
'uppercase' => n2_('Uppercase'),
'lowercase' => n2_('Lowercase')
)
));
new TextShadow($font, '-font-tshadow', n2_('Text
shadow'), '0|*|0|*|1|*|000000FF');
new Textarea($font, '-font-extracss', 'CSS',
'', array(
'width' => 314,
'height' => 80
));
}
/**
* @param ContainerDesign $container
*/
protected function style($container) {
$backgroundFieldset = new FieldsetDesign($container,
'basiccss-style', n2_('Background'));
new Color($backgroundFieldset, '-style-backgroundcolor',
n2_('Background color'), '000000FF', array(
'alpha' => true
));
new NumberSlider($backgroundFieldset, '-style-opacity',
n2_('Opacity'), '100', array(
'min' => 0,
'max' => 100,
'unit' => '%',
'wide' => 3
));
new Button\ButtonMoreLess($backgroundFieldset,
'-style-more', '', array(
'relatedFields' => array(
'layer-style-extracss',
'layer-style-boxshadow'
)
));
new BoxShadow($backgroundFieldset, '-style-boxshadow',
n2_('Box shadow'), '0|*|0|*|0|*|0|*|000000ff');
new Textarea($backgroundFieldset, '-style-extracss',
'CSS', '', array(
'width' => 314,
'height' => 80
));
$borderFieldset = new FieldsetDesign($container,
'basiccss-style-border', n2_('Border'));
$borderFieldset->setParentDesign('fieldset-layer-window-basiccss-style');
$borderFieldset->addAttribute('data-singular',
'style-border');
new Border($borderFieldset, '-style-border',
n2_('Border'), '0|*|solid|*|000000ff');
new NumberAutoComplete($borderFieldset,
'-style-borderradius', n2_('Border radius'),
'0', array(
'min' => 0,
'values' => array(
0,
3,
5,
10,
99
),
'unit' => 'px',
'wide' => 3
));
$spacingFieldset = new FieldsetDesign($container,
'basiccss-style-spacing', n2_('Spacing'));
$spacingFieldset->setParentDesign('fieldset-layer-window-basiccss-style');
$spacingFieldset->addAttribute('data-singular',
'style-spacing');
$padding = new MarginPadding($spacingFieldset,
'-style-padding', n2_('Padding'),
'0|*|0|*|0|*|0|*|px');
for ($i = 1; $i < 5; $i++) {
new NumberAutoComplete($padding, 'padding-' . $i,
false, '', array(
'values' => array(
0,
5,
10,
20,
30
),
'style' => 'width: 22px;'
));
}
new Unit($padding, 'padding-5', '',
'', array(
'units' => array(
'px',
'em',
'%'
)
));
}
}PK9e�[����!�!TApplication/Admin/Layout/Block/Slide/LayerWindow/Settings/LayerWindowSettingsRow.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slide\LayerWindow\Settings;
use Nextend\Framework\Form\ContainerInterface;
use Nextend\Framework\Form\Element\Hidden;
use Nextend\Framework\Form\Element\LayerWindowFocus;
use Nextend\Framework\Form\Element\MarginPadding;
use Nextend\Framework\Form\Element\MixedField\BoxShadow;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Select\Gradient;
use Nextend\Framework\Form\Element\Select\LinkTarget;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Element\Text\Color;
use Nextend\Framework\Form\Element\Text\FieldImage;
use Nextend\Framework\Form\Element\Text\HiddenText;
use Nextend\Framework\Form\Element\Text\NumberAutoComplete;
use Nextend\Framework\Form\Element\Text\NumberSlider;
use Nextend\Framework\Form\Element\Text\Url;
use
Nextend\Framework\Form\Fieldset\LayerWindow\FieldsetLayerWindowLabelFields;
use
Nextend\Framework\Form\Fieldset\LayerWindow\FieldsetLayerWindowStyleMode;
use Nextend\SmartSlider3\Form\Element\Columns;
use Nextend\SmartSlider3\Form\Element\Radio\InnerAlign;
class LayerWindowSettingsRow extends AbstractLayerWindowSettings {
public function getName() {
return 'row';
}
protected function extendContent() {
$structure = new
FieldsetLayerWindowLabelFields($this->contentContainer,
'fields-row-structure', n2_('Columns'));
new Columns($structure, 'row-columns', '1');
new Hidden($structure, 'row-opened', 1);
$rowGeneral = new
FieldsetLayerWindowLabelFields($this->contentContainer,
'fields-row-general', n2_('General'));
new InnerAlign($rowGeneral, 'row-inneralign',
n2_('Inner align'), 'inherit', array(
'rowAttributes' => array(
'data-devicespecific' => ''
),
'tipLabel' => n2_('Inner align'),
'tipDescription' => n2_('Positions the layers
inside horizontally.')
));
new NumberSlider($rowGeneral, 'row-gutter',
n2_('Gutter'), '', array(
'min' => 0,
'max' => 300,
'sliderMax' => 160,
'unit' => 'px',
'rowAttributes' => array(
'data-devicespecific' => ''
),
'style' => 'width: 22px;',
'tipLabel' => n2_('Gutter'),
'tipDescription' => n2_('Creates space
between the columns')
));
new NumberSlider($rowGeneral, 'row-wrap-after',
n2_('Wrap after'), 0, array(
'min' => 0,
'max' => 10,
'style' => 'width:22px;',
'unit' => n2_('Column'),
'rowAttributes' => array(
'data-devicespecific' => ''
),
'tipLabel' => n2_('Wrap after'),
'tipDescription' => n2_('Breaks the columns
to the given amount of rows.')
));
new OnOff($rowGeneral, 'row-fullwidth', n2_('Full
width'), 1);
new OnOff($rowGeneral, 'row-stretch',
n2_('Stretch'), 0, array(
'tipLabel' => n2_('Stretch'),
'tipDescription' => n2_('Makes the row fill
the available vertical space')
));
$link = new
FieldsetLayerWindowLabelFields($this->contentContainer,
'fields-row-link', n2_('Link'));
new Url($link, 'row-href', n2_('Link'),
'', array(
'relatedFields' => array(
'layerrow-href-target',
'layerrow-aria-label'
),
'width' => 248
));
new LinkTarget($link, 'row-href-target', n2_('Target
window'));
new Text($link, 'row-aria-label', n2_('ARIA
label'), '', array(
'style' => 'width:190px;',
'tipLabel' => n2_('ARIA label')
));
}
protected function extendStyle() {
$this->backgroundImage($this->styleContainer);
$this->background($this->styleContainer);
$this->border($this->styleContainer);
$this->spacing($this->styleContainer);
}
/**
* @param ContainerInterface $container
*/
protected function backgroundImage($container) {
$backgroundImage = new FieldsetLayerWindowLabelFields($container,
'fields-row-background-image', n2_('Background
image'));
$fieldImage = new FieldImage($backgroundImage,
'row-background-image', n2_('Background image'),
'', array(
'width' => 220,
'relatedFields' => array(
'layerrow-background-focus'
)
));
$fieldFocusX = new HiddenText($backgroundImage,
'row-background-focus-x', 50);
$fieldFocusY = new HiddenText($backgroundImage,
'row-background-focus-y', 50);
$focusField = new LayerWindowFocus($backgroundImage,
'row-background-focus', n2_('Focus'), array(
'tipLabel' => n2_('Focus'),
'tipDescription' => n2_('You can set the
starting position of a background image. This makes sure that the selected
part will always remain visible, so you should pick the most important
part.')
));
$focusField->setFields($fieldImage, $fieldFocusX, $fieldFocusY);
}
/**
* @param ContainerInterface $container
*/
protected function background($container) {
$background = new FieldsetLayerWindowStyleMode($container,
'fields-row-background', n2_('Background'), array(
'' => 'Normal',
'-hover' => 'Hover'
));
new Color($background, 'row-background-color',
n2_('Background color'), 'ffffff00', array(
'alpha' => true
));
new Gradient($background, 'row-background-gradient',
n2_('Gradient'), 'off', array(
'relatedFields' => array(
'layerrow-background-color-end'
)
));
new Color($background, 'row-background-color-end',
n2_('Color end'), 'ffffff00', array(
'alpha' => true
));
new BoxShadow($background, 'row-boxshadow', n2_('Box
shadow'), '0|*|0|*|0|*|0|*|00000080');
}
/**
* @param ContainerInterface $container
*/
protected function border($container) {
$border = new FieldsetLayerWindowStyleMode($container,
'fields-row-border', n2_('Border'), array(
'' => 'Normal',
'-hover' => 'Hover'
));
$borderWidth = new MarginPadding($border,
'row-border-width', n2_('Border'),
'0|*|0|*|0|*|0', array(
'unit' => 'px',
'relatedFields' => array(
'layerrow-border-style',
'layerrow-border-color'
)
));
for ($i = 1; $i < 5; $i++) {
new NumberAutoComplete($borderWidth,
'row-border-width-' . $i, false, '', array(
'values' => array(
0,
1,
2,
3,
5
),
'wide' => 3
));
}
new Select($border, 'row-border-style',
n2_('Style'), 'none', array(
'options' => array(
'none' => n2_('None'),
'solid' => n2_('Solid'),
'dashed' => n2_('Dashed'),
'dotted' => n2_('Dotted'),
)
));
new Color($border, 'row-border-color',
n2_('Color'), 'ffffffff', array(
'alpha' => true
));
new NumberAutoComplete($border, 'row-border-radius',
n2_('Border radius'), 0, array(
'values' => array(
0,
3,
5,
10,
99
),
'style' => 'width: 22px;',
'unit' => 'px'
));
}
/**
* @param ContainerInterface $container
*/
protected function spacing($container) {
$spacing = new FieldsetLayerWindowLabelFields($container,
'fields-row-spacing', n2_('Spacing'));
$padding = new MarginPadding($spacing, 'row-padding',
n2_('Padding'), '10|*|10|*|10|*|10', array(
'rowAttributes' => array(
'data-devicespecific' => ''
)
));
$padding->setUnit('px');
for ($i = 1; $i < 5; $i++) {
new NumberAutoComplete($padding, 'row-padding-' . $i,
false, '', array(
'values' => array(
0,
5,
10,
20,
30
),
'style' => 'width: 22px;'
));
}
}
}PK9e�[Ql���4�4VApplication/Admin/Layout/Block/Slide/LayerWindow/Settings/LayerWindowSettingsSlide.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slide\LayerWindow\Settings;
use Nextend\Framework\Form\Element\Button;
use Nextend\Framework\Form\Element\Devices;
use Nextend\Framework\Form\Element\Grouping;
use Nextend\Framework\Form\Element\LayerWindowFocus;
use Nextend\Framework\Form\Element\MarginPadding;
use Nextend\Framework\Form\Element\Message\Warning;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Select\Gradient;
use Nextend\Framework\Form\Element\Select\LinkTarget;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Element\Text\Color;
use Nextend\Framework\Form\Element\Text\FieldImage;
use Nextend\Framework\Form\Element\Text\FieldImageResponsive;
use Nextend\Framework\Form\Element\Text\Number;
use Nextend\Framework\Form\Element\Text\NumberAutoComplete;
use Nextend\Framework\Form\Element\Text\NumberSlider;
use Nextend\Framework\Form\Element\Text\Url;
use Nextend\Framework\Form\Element\Text\Video;
use Nextend\Framework\Form\Element\Textarea;
use Nextend\Framework\Form\Fieldset\LayerWindow\FieldsetLayerWindow;
use
Nextend\Framework\Form\Fieldset\LayerWindow\FieldsetLayerWindowLabelFields;
use Nextend\SmartSlider3\Form\Element\BackgroundImage;
use Nextend\SmartSlider3\Form\Element\DatePicker;
use Nextend\SmartSlider3\Slider\Admin\AdminSlider;
use Nextend\SmartSlider3\Slider\SliderType\SliderTypeFactory;
class LayerWindowSettingsSlide extends AbstractLayerWindowSettings {
/** @var AdminSlider */
protected $renderableAdminSlider;
/**
* LayerWindowSettingsSlide constructor.
*
* @param $blockLayerWindow
* @param AdminSlider $renderableAdminSlider
*/
public function __construct($blockLayerWindow, $renderableAdminSlider)
{
$this->renderableAdminSlider = $renderableAdminSlider;
parent::__construct($blockLayerWindow);
}
public function getName() {
return 'slide';
}
protected function extendContent() {
$general = new FieldsetLayerWindow($this->contentContainer,
'fields-slide-general', n2_('General'));
new Text($general, 'slide-title', n2_('Slide
title'), n2_('Slide'), array(
'style' => 'width:302px;',
));
new Textarea($general, 'slide-description',
n2_('Description'), '', array(
'width' => 314
));
new FieldImage($general, 'slide-thumbnail',
n2_('Thumbnail'), '', array(
'width' => 220
));
new Devices($general, 'slide-show', n2_('Hide
on'));
if (!$this->renderableAdminSlider->getEditedSlide()
->isStatic()) {
$link = new FieldsetLayerWindow($this->contentContainer,
'fields-slide-link', n2_('Link'));
new Url($link, 'slide-href', n2_('Link'),
'', array(
'relatedFields' => array(
'layerslide-href-target',
'layerslide-aria-label'
),
'width' => 248
));
new LinkTarget($link, 'slide-href-target',
n2_('Target window'));
new Text($link, 'slide-aria-label', n2_('ARIA
label'), '', array(
'style' => 'width:190px;',
'tipLabel' => n2_('ARIA label')
));
}
if (!$this->renderableAdminSlider->getEditedSlide()
->isStatic()) {
SliderTypeFactory::getType($this->renderableAdminSlider->data->get('type'))
->createAdmin()
->renderSlideFields($this->contentContainer);
}
if ($this->renderableAdminSlider->getEditedSlide()
->hasGenerator()) {
$generator = new
FieldsetLayerWindow($this->contentContainer,
'fields-slide-generator', n2_('Generator'));
new Number($generator,
'slide-slide-generator-slides', n2_('Slides'), 5,
array(
'unit' => n2_x('slides',
'Unit'),
'wide' => 3
));
}
$advanced = new FieldsetLayerWindow($this->contentContainer,
'fields-slide-advanced', n2_('Advanced'));
if
($this->renderableAdminSlider->params->get('global-lightbox',
0)) {
new FieldImageResponsive($advanced,
'slide-ligthboxImage', n2_('Custom lightbox image'),
'', array(
'width' => 180
));
}
new OnOff($advanced, 'slide-published',
n2_('Published'), 1);
if (!$this->renderableAdminSlider->getEditedSlide()
->isStatic() &&
$this->renderableAdminSlider->params->get('autoplay')) {
new Number($advanced, 'slide-slide-duration',
n2_('Slide duration'), 0, array(
'unit' => 'ms',
'wide' => 5
));
}
new DatePicker($advanced, 'slide-publish_up',
n2_('Publish on'), '0000-00-00 00:00:00');
new DatePicker($advanced, 'slide-publish_down',
n2_('Unpublish on'), '0000-00-00 00:00:00');
if (!$this->renderableAdminSlider->getEditedSlide()
->isStatic()) {
new Select($advanced, 'slide-thumbnailType',
n2_('Thumbnail type'), 'default', array(
'options' => array(
'default' => n2_('Default'),
'videoDark' => n2_('Video')
),
'tipLabel' => n2_('Thumbnail
type'),
'tipDescription' => n2_('If you have a
video on your slide, you can put a play icon on the thumbnail image to
indicate that.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1724-slide#thumbnail-type'
));
}
}
protected function extendStyle() {
if (!$this->renderableAdminSlider->getEditedSlide()
->isStatic()) {
$this->background();
}
$spacing = new
FieldsetLayerWindowLabelFields($this->styleContainer,
'fields-slide-spacing', n2_('Spacing'));
$padding = new MarginPadding($spacing, 'slide-padding',
n2_('Padding'), '10|*|10|*|10|*|10', array(
'unit' => 'px',
'rowAttributes' => array(
'data-devicespecific' => ''
)
));
for ($i = 1; $i < 5; $i++) {
new NumberAutoComplete($padding, 'slide-padding-' .
$i, false, '', array(
'values' => array(
0,
5,
10,
20,
30
),
'style' => 'width: 22px;'
));
}
new Button($spacing,
'-slide-clear-device-specific-changes', n2_('Device specific
settings'), n2_('Clear'), array(
'tipLabel' => n2_('Clear device
specific settings'),
'tipDescription' => n2_('Erases all device
specific changes you made on the current device.'),
));
}
private function background() {
$background = new
FieldsetLayerWindowLabelFields($this->styleContainer,
'fields-slide-background', n2_('Background'));
new BackgroundImage($background->getFieldsetLabel(),
'slide-background-type', false, 'color', array(
'relatedValueFields' => array(
array(
'values' => array(
'image',
'video'
),
'field' => array(
'layer-slide-background-image',
'layerslide-backgroundColorOverlay',
'fieldset-layer-window-fields-slide-seo'
)
),
array(
'values' => array(
'image'
),
'field' => array(
'layerslide-kenburns-animation'
)
),
array(
'values' => array(
'video'
),
'field' => array(
'layer-slide-background-video'
)
),
)
));
$rowVideo = new Grouping($background,
'-slide-background-video');
new Warning($rowVideo, 'slide-background-notice',
sprintf(n2_('Video autoplaying has a lot of limitations made by
browsers. %1$sLearn about them.%2$s'), '<a
href="https://smartslider.helpscoutdocs.com/article/1919-video-autoplay-handling"
target="_blank">', '</a>'));
new Video($rowVideo, 'slide-backgroundVideoMp4',
n2_('Slide background video'), '', array(
'post' => 'break',
'width' => 220
));
new NumberSlider($rowVideo,
'slide-backgroundVideoOpacity', n2_('Opacity'), 100,
array(
'unit' => '%',
'min' => 0,
'max' => 100,
'style' => 'width:22px;'
));
new OnOff($rowVideo, 'slide-backgroundVideoMuted',
n2_('Muted'), 1);
new OnOff($rowVideo, 'slide-backgroundVideoLoop',
n2_x('Loop', 'Video/Audio play'), 1);
new OnOff($rowVideo, 'slide-backgroundVideoReset',
n2_('Restart on slide change'), 1, array(
'tipLabel' => n2_('Restart on slide
change'),
'tipDescription' => n2_('Starts the video
from the beginning when the slide is viewed again.')
));
new Select($rowVideo, 'slide-backgroundVideoMode',
n2_('Fill mode'), 'fill', array(
'options' => array(
'fill' => n2_('Fill'),
'fit' => n2_('Fit'),
'center' => n2_('Center')
)
));
$rowImage = new Grouping($background,
'-slide-background-image');
$slideBackgroundAttr = array(
'width' => 180,
'relatedFields' => array(
'layerslide-background-focus',
'layerslide-backgroundFocusX',
'layerslide-backgroundFocusY',
'layerslide-backgroundImageOpacity',
'layerslide-backgroundImageBlur',
'layerslide-backgroundMode',
'layerslide-background-notice-image'
)
);
$slideBackgroundAttr['tipLabel'] = n2_('Slide
background');
$slideBackgroundAttr['tipDescription'] = n2_('Select
a background image for the slide. By clicking the small screen icon, you
can pick different images for different devices.');
$slideBackgroundAttr['tipLink'] =
'https://smartslider.helpscoutdocs.com/article/1724-slide#image';
$fieldImage = new FieldImageResponsive($rowImage,
'slide-backgroundImage', n2_('Slide background'),
'', $slideBackgroundAttr);
$focusField = new LayerWindowFocus($rowImage,
'slide-background-focus', n2_('Focus'));
$fieldFocusX = new Number($rowImage,
'slide-backgroundFocusX', false, 50, array(
'wide' => 3,
'sublabel' => 'X',
'unit' => '%'
));
$fieldFocusY = new Number($rowImage,
'slide-backgroundFocusY', false, 50, array(
'wide' => 3,
'sublabel' => 'Y',
'unit' => '%'
));
$focusField->setFields($fieldImage, $fieldFocusX, $fieldFocusY);
new Warning($rowImage, 'slide-background-notice-image',
sprintf(n2_('Please read %1$sour detailed guide%2$s about setting your
own slide background correctly.'), '<a
href="https://smartslider.helpscoutdocs.com/article/1922-how-to-set-your-background-image"
target="_blank">', '</a>'));
new Select\FillMode($rowImage, 'slide-backgroundMode',
n2_('Fill mode'), 'default', array(
'useGlobal' => true
));
new NumberSlider($rowImage,
'slide-backgroundImageOpacity', n2_('Opacity'), 100,
array(
'unit' => '%',
'min' => 0,
'max' => 100,
'style' => 'width:22px;'
));
new NumberSlider($rowImage, 'slide-backgroundImageBlur',
n2_('Blur'), 0, array(
'unit' => 'px',
'min' => 0,
'max' => 50,
'style' => 'width:22px;'
));
$rowColor = new Grouping($background,
'-slide-background-color');
new Color($rowColor, 'slide-backgroundColor',
n2_('Color'), 'ffffff00', array(
'alpha' => true
));
new Gradient($rowColor, 'slide-backgroundGradient',
n2_('Gradient'), 'off', array(
'relatedFields' => array(
'layerslide-backgroundColorEnd'
)
));
new Color($rowColor, 'slide-backgroundColorEnd',
n2_('Color end'), 'ffffff00', array(
'alpha' => true
));
new OnOff($rowColor, 'slide-backgroundColorOverlay',
n2_('Overlay'), 0, array(
'tipLabel' => n2_('Overlay'),
'tipDescription' => n2_('Puts the color in
front of the image.')
));
$seo = new FieldsetLayerWindowLabelFields($this->styleContainer,
'fields-slide-seo', n2_('SEO'));
new Text($seo, 'slide-backgroundAlt', n2_('Image
alt') . ' [SEO]', '', array(
'style' => "width:133px;"
));
new Text($seo, 'slide-backgroundTitle', n2_('Image
title') . ' [SEO]', '', array(
'style' => "width:133px;"
));
}
}PK9e�[e\�Q��DApplication/Admin/Layout/Block/Slide/LayerWindow/Tab/AbstractTab.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slide\LayerWindow\Tab;
use Nextend\Framework\Form\ContainerInterface;
use Nextend\Framework\Form\Form;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slide\LayerWindow\BlockLayerWindow;
abstract class AbstractTab {
/**
* @var BlockLayerWindow
*/
protected $blockLayerWindow;
/**
* @var Form
*/
protected $form;
/**
* AbstractTab constructor.
*
* @param BlockLayerWindow $blockLayerWindow
*/
public function __construct($blockLayerWindow) {
$this->blockLayerWindow = $blockLayerWindow;
$this->form = new Form($blockLayerWindow, 'layer');
}
/**
* @return ContainerInterface
*/
public function getContainer() {
return $this->form->getContainer();
}
/**
* @return string
*/
abstract public function getName();
/**
* @return string
*/
abstract public function getLabel();
/**
* @return string
*/
abstract public function getIcon();
public function display() {
$this->form->render();
}
}PK9e�[>G�o�F�FEApplication/Admin/Layout/Block/Slide/LayerWindow/Tab/TabAnimation.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slide\LayerWindow\Tab;
use Nextend\Framework\Form\Container\LayerWindow\ContainerAnimation;
use Nextend\Framework\Form\Element\Grouping;
use Nextend\Framework\Form\Element\MixedField;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Select\Easing;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Element\Text\Color;
use Nextend\Framework\Form\Element\Text\Number;
use Nextend\Framework\Form\Element\Text\NumberAutoComplete;
use Nextend\Framework\Form\Element\Text\NumberSlider;
use Nextend\Framework\Form\Element\Text\TextMultiAutoComplete;
use Nextend\Framework\Form\Fieldset\LayerWindow\FieldsetLayerWindow;
class TabAnimation extends AbstractTab {
/**
* @return string
*/
public function getName() {
return 'animations';
}
/**
* @return string
*/
public function getLabel() {
return n2_('Animation');
}
/**
* @return string
*/
public function getIcon() {
return 'ssi_24 ssi_24--animation';
}
public function display() {
$containerAnimation = new
ContainerAnimation($this->getContainer(), 'animation');
$containerAnimation->createTab('in',
n2_x('In', 'Layer animation'));
$containerAnimation->createTab('loop',
n2_('Loop'));
$containerAnimation->createTab('out',
n2_x('Out', 'Layer animation'));
$tabEvents = $containerAnimation->createTab('events',
n2_x('Events', 'Layer animation'));
$events = new FieldsetLayerWindow($tabEvents,
'animations-events-events');
$eventNames = array(
'layerAnimationPlayIn',
'layerAnimationPlayLoop',
'LayerClick',
'LayerMouseEnter',
'LayerMouseLeave',
'SlideClick',
'SlideMouseEnter',
'SlideMouseLeave',
'SliderClick',
'SliderMouseEnter',
'SliderMouseLeave'
);
new TextMultiAutoComplete($events, 'in-play-event',
n2_('Plays in when'), '', array(
'options' => $eventNames,
'style' => 'width:260px;'
));
new TextMultiAutoComplete($events, 'out-play-event',
n2_('Plays out when'), '', array(
'options' => array_merge($eventNames, array(
'InstantOut',
'OutForced'
)),
'style' => 'width:260px;'
));
new TextMultiAutoComplete($events, 'loop-play-event',
n2_('Plays loop when'), '', array(
'options' => $eventNames,
'style' => 'width:260px;'
));
new TextMultiAutoComplete($events, 'loop-pause-event',
n2_('Pauses loop when'), '', array(
'options' => $eventNames,
'style' => 'width:260px;'
));
new TextMultiAutoComplete($events, 'loop-stop-event',
n2_('Stops loop when'), '', array(
'options' => $eventNames,
'style' => 'width:260px;'
));
new OnOff($events, 'repeatable',
n2_('Repeatable'), 0, array(
'relatedFieldsOn' => array(
'layerstart-delay',
'layerend-delay'
),
'tipLabel' => n2_('Repeatable'),
'tipDescription' => n2_('Allows the layer
animations to play more than once.')
));
new NumberAutoComplete($events, 'start-delay',
n2_('Start delay'), 0, array(
'min' => 0,
'values' => array(
0,
500,
800,
1000,
1500,
2000
),
'unit' => 'ms',
'wide' => 5
));
new NumberAutoComplete($events, 'end-delay',
n2_('End delay'), 0, array(
'min' => 0,
'values' => array(
0,
500,
800,
1000,
1500,
2000
),
'unit' => 'ms',
'wide' => 5
));
new OnOff($events, 'loop-repeat-self-only',
n2_('Repeat loop only'), 0, array(
'tipLabel' => n2_('Repeat loop
only'),
'tipDescription' => n2_('Allows the stopped
loop to start again.')
));
$triggers = new FieldsetLayerWindow($tabEvents,
'animations-events-triggers', n2_('Trigger custom event
on'));
new Text($triggers, 'onclick', n2_('Click'),
'', array(
'style' => 'width:73px;'
));
new Text($triggers, 'onmouseenter', n2_('Mouse
enter'), '', array(
'style' => 'width:73px;'
));
new Text($triggers, 'onmouseleave', n2_('Mouse
leave'), '', array(
'style' => 'width:73px;'
));
new Text($triggers, 'onplay', n2_('Media
started'), '', array(
'style' => 'width:73px;'
));
new Text($triggers, 'onpause', n2_('Media
paused'), '', array(
'style' => 'width:73px;'
));
new Text($triggers, 'onstop', n2_('Media
stopped'), '', array(
'style' => 'width:73px;'
));
$this->formAnimationsBasic();
$this->formAnimationsReveal();
parent::display();
}
protected function formAnimationsBasic() {
$basicForm = new FieldsetLayerWindow($this->getContainer(),
'layer-animation-basic-form');
new NumberAutoComplete($basicForm, '-anim-duration',
n2_('Duration'), 500, array(
'min' => 0,
'values' => array(
500,
800,
1000,
1500,
2000
),
'unit' => 'ms',
'wide' => 5
));
new NumberAutoComplete($basicForm, '-anim-delay',
n2_('Delay'), 0, array(
'min' => 0,
'values' => array(
0,
500,
800,
1000,
1500,
2000
),
'unit' => 'ms',
'wide' => 5
));
new Easing($basicForm, '-anim-ease',
n2_('Easing'), 'easeOutCubic');
new NumberSlider($basicForm, '-anim-opacity',
n2_('Opacity'), 100, array(
'wide' => 3,
'min' => 0,
'max' => 100,
'unit' => '%'
));
new NumberSlider($basicForm, '-anim-n2blur',
n2_('Blur'), 0, array(
'wide' => 3,
'min' => 0,
'max' => 100,
'unit' => 'px'
));
$offset = new Grouping($basicForm, 'animation-offset',
n2_('Offset'), array(
'rowAttributes' => array(
'data-devicespecific' => ''
)
));
new NumberAutoComplete($offset, '-anim-x', false, 0,
array(
'sublabel' => 'X',
'values' => array(
-800,
-400,
-200,
-100,
-50,
0,
50,
100,
200,
400,
800
),
'unit' => 'px',
'style' => 'width:30px;'
));
new NumberAutoComplete($offset, '-anim-y', false, 0,
array(
'sublabel' => 'Y',
'values' => array(
-800,
-400,
-200,
-100,
-50,
0,
50,
100,
200,
400,
800
),
'unit' => 'px',
'style' => 'width:30px;'
));
new Number($basicForm, '-anim-z', 'Z', 0,
array(
'wide' => 4,
'unit' => 'px',
'style' => 'width:30px;'
));
$rotate = new Grouping($basicForm, 'animation-rotate',
n2_('Rotate'));
new NumberAutoComplete($rotate, '-anim-rotationX', false,
0, array(
'wide' => 4,
'sublabel' => 'X',
'values' => array(
0,
90,
180,
-90,
-180
),
'unit' => '°'
));
new NumberAutoComplete($rotate, '-anim-rotationY', false,
0, array(
'wide' => 4,
'sublabel' => 'Y',
'values' => array(
0,
90,
180,
-90,
-180
),
'unit' => '°'
));
new NumberAutoComplete($rotate, '-anim-rotationZ', false,
0, array(
'wide' => 4,
'sublabel' => 'Z',
'values' => array(
0,
90,
180,
-90,
-180
),
'unit' => '°'
));
$scale = new Grouping($basicForm, 'animation-scale',
n2_('Scale'));
new NumberAutoComplete($scale, '-anim-scaleX', false, 0,
array(
'wide' => 4,
'sublabel' => 'X',
'min' => 0,
'values' => array(
0,
50,
100,
150
),
'unit' => '%'
));
new NumberAutoComplete($scale, '-anim-scaleY', false, 0,
array(
'wide' => 4,
'sublabel' => 'Y',
'min' => 0,
'values' => array(
0,
50,
100,
150
),
'unit' => '%'
));
new Number($basicForm, '-anim-skew',
n2_('Skew'), 0, array(
'wide' => 4,
'unit' => '%'
));
$layerAnimationBasicFormIn = new
FieldsetLayerWindow($this->getContainer(),
'layer-animation-basic-form-in', false);
$transformOrigin = new MixedField($layerAnimationBasicFormIn,
'basic-in-transformorigin', n2_('Transform origin'),
'50|*|50|*|0');
new NumberAutoComplete($transformOrigin,
'in-transformorigin-x', false, 50, array(
'wide' => 4,
'sublabel' => 'X',
'values' => array(
0,
50,
100
),
'unit' => '%'
));
new NumberAutoComplete($transformOrigin,
'in-transformorigin-y', false, 50, array(
'wide' => 4,
'sublabel' => 'Y',
'values' => array(
0,
50,
100
),
'unit' => '%'
));
new Number($transformOrigin, 'in-transformorigin-z',
false, 0, array(
'wide' => 4,
'sublabel' => 'Z',
'unit' => 'px'
));
new OnOff($layerAnimationBasicFormIn,
'basic-in-special-zero', n2_('Special Zero'), 0, array(
'tipLabel' => n2_('Special Zero'),
'tipDescription' => n2_('Makes the last
keyframe to be the origin of the layer animation, instead of its canvas
position.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1889-layer-animation'
));
$layerAnimationBasicFormLoop = new
FieldsetLayerWindow($this->getContainer(),
'layer-animation-basic-form-loop', false);
new Number($layerAnimationBasicFormLoop,
'basic-loop-repeat-count', n2_('Repeat count'), 0,
array(
'wide' => 3,
'unit' => n2_('loops'),
'tipLabel' => n2_('Repeat count'),
'tipDescription' => n2_('You can restrict the
loop to play only a certain amount of loops, instead of infinite.')
));
new Number($layerAnimationBasicFormLoop,
'basic-loop-repeat-start-delay', n2_('Start delay'), 0,
array(
'wide' => 5,
'unit' => 'ms'
));
$transformOrigin = new MixedField($layerAnimationBasicFormLoop,
'basic-loop-transformorigin', n2_('Transform origin'),
'50|*|50|*|0');
new NumberAutoComplete($transformOrigin,
'loop-transformorigin-x', false, 50, array(
'wide' => 4,
'sublabel' => 'X',
'values' => array(
0,
50,
100
),
'unit' => '%'
));
new NumberAutoComplete($transformOrigin,
'loop-transformorigin-y', false, 50, array(
'wide' => 4,
'sublabel' => 'Y',
'values' => array(
0,
50,
100
),
'unit' => '%'
));
new Number($transformOrigin, 'loop-transformorigin-z',
false, 0, array(
'wide' => 4,
'sublabel' => 'Z',
'unit' => 'px'
));
$layerAnimationBasicFormOut = new
FieldsetLayerWindow($this->getContainer(),
'layer-animation-basic-form-out', false);
$transformOrigin = new MixedField($layerAnimationBasicFormOut,
'basic-out-transformorigin', n2_('Transform origin'),
'50|*|50|*|0');
new NumberAutoComplete($transformOrigin,
'out-transformorigin-x', false, 50, array(
'wide' => 4,
'sublabel' => 'X',
'values' => array(
0,
50,
100
),
'unit' => '%'
));
new NumberAutoComplete($transformOrigin,
'out-transformorigin-y', false, 50, array(
'wide' => 4,
'sublabel' => 'Y',
'values' => array(
0,
50,
100
),
'unit' => '%'
));
new Number($transformOrigin, 'out-transformorigin-z',
false, 0, array(
'wide' => 4,
'sublabel' => 'Z',
'unit' => 'px'
));
}
protected function formAnimationsReveal() {
$revealForm = new FieldsetLayerWindow($this->getContainer(),
'layer-animation-reveal-form', false);
new Color($revealForm, '-reveal-color',
n2_('Color'), 'ffffff');
new NumberAutoComplete($revealForm, '-reveal-duration',
n2_('Duration'), 500, array(
'min' => 0,
'values' => array(
500,
800,
1000,
1500,
2000
),
'unit' => 'ms',
'wide' => 5
));
new NumberAutoComplete($revealForm, '-reveal-delay',
n2_('Delay'), 0, array(
'min' => 0,
'values' => array(
0,
500,
800,
1000,
1500,
2000
),
'unit' => 'ms',
'wide' => 5
));
$options = array(
'no' => n2_('No'),
'top' => n2_x('Slide',
'Animation') . ' - ' . n2_('Top'),
'right' => n2_x('Slide',
'Animation') . ' - ' . n2_('Right'),
'bottom' => n2_x('Slide',
'Animation') . ' - ' . n2_('Bottom'),
'left' => n2_x('Slide',
'Animation') . ' - ' . n2_('Left'),
'skew-top' => n2_('Skew') .
' - ' . n2_('Top'),
'skew-right' => n2_('Skew') .
' - ' . n2_('Right'),
'skew-bottom' => n2_('Skew') .
' - ' . n2_('Bottom'),
'skew-left' => n2_('Skew') .
' - ' . n2_('Left'),
'curtains-horizontal' =>
n2_('Curtains') . ' - ' . n2_('Horizontal'),
'curtains-vertical' =>
n2_('Curtains') . ' - ' . n2_('Vertical'),
'curtains-diagonal-1' =>
n2_('Curtains') . ' - ' . n2_('Diagonal') .
' 1',
'curtains-diagonal-2' =>
n2_('Curtains') . ' - ' . n2_('Diagonal') .
' 2',
'rotate-top-left' => n2_('Rotate')
. ' - ' . n2_('Top') . ' ' .
n2_('Left') . ' 1',
'rotate-top-left-' => n2_('Rotate')
. ' - ' . n2_('Top') . ' ' .
n2_('Left') . ' 2',
'rotate-top-right' => n2_('Rotate')
. ' - ' . n2_('Top') . ' ' .
n2_('Right') . ' 1',
'rotate-top-right-' => n2_('Rotate')
. ' - ' . n2_('Top') . ' ' .
n2_('Right') . ' 2',
'rotate-bottom-right' => n2_('Rotate')
. ' - ' . n2_('Bottom') . ' ' .
n2_('Right') . ' 1',
'rotate-bottom-right-' => n2_('Rotate')
. ' - ' . n2_('Bottom') . ' ' .
n2_('Right') . ' 2',
'rotate-bottom-left' => n2_('Rotate')
. ' - ' . n2_('Bottom') . ' ' .
n2_('Left') . ' 1',
'rotate-bottom-left-' => n2_('Rotate')
. ' - ' . n2_('Bottom') . ' ' .
n2_('Left') . ' 2',
'circle-top' => n2_('Circle')
. ' - ' . n2_('Top'),
'circle-right' => n2_('Circle')
. ' - ' . n2_('Right'),
'circle-bottom' => n2_('Circle')
. ' - ' . n2_('Bottom'),
'circle-left' => n2_('Circle')
. ' - ' . n2_('Left'),
);
new Select($revealForm, '-reveal-from',
n2_('From'), 'top', array(
'options' => $options
));
new Easing($revealForm, '-reveal-from-ease',
n2_('Easing'), 'easeOutCubic');
unset($options['no']);
new Select($revealForm, '-reveal-to',
n2_('To'), 'bottom', array(
'options' => $options
));
new Easing($revealForm, '-reveal-to-ease',
n2_('Easing'), 'easeOutCubic');
new Select($revealForm, '-reveal-content',
n2_('Content'), '', array(
'options' => array(
'' => n2_('Default'),
'fade' => n2_('Fade'),
'scale-up' => n2_('Scale up'),
'scale-down' => n2_('Scale down'),
'top' => n2_('Top'),
'right' => n2_('Right'),
'bottom' => n2_('Bottom'),
'left' => n2_('Left')
)
));
}
}
PK9e�[r�����CApplication/Admin/Layout/Block/Slide/LayerWindow/Tab/TabContent.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slide\LayerWindow\Tab;
class TabContent extends AbstractTab {
/**
* @return string
*/
public function getName() {
return 'content';
}
/**
* @return string
*/
public function getLabel() {
return n2_('Content');
}
/**
* @return string
*/
public function getIcon() {
return 'ssi_24 ssi_24--edit';
}
}PK9e�[�H���AApplication/Admin/Layout/Block/Slide/LayerWindow/Tab/TabGoPro.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slide\LayerWindow\Tab;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\FreeNeedMore\BlockFreeNeedMore;PK9e�[��\��AApplication/Admin/Layout/Block/Slide/LayerWindow/Tab/TabStyle.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slide\LayerWindow\Tab;
class TabStyle extends AbstractTab {
/**
* @return string
*/
public function getName() {
return 'style';
}
/**
* @return string
*/
public function getLabel() {
return n2_('Style');
}
/**
* @return string
*/
public function getIcon() {
return 'ssi_24 ssi_24--style';
}
}PK9e�[v�M��?Application/Admin/Layout/Block/Slide/SlideBox/BlockSlideBox.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slide\SlideBox;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\Framework\View\AbstractBlock;
use Nextend\SmartSlider3\Application\Admin\TraitAdminUrl;
use Nextend\SmartSlider3\Slider\Feature\Optimize;
use Nextend\SmartSlider3\Slider\Slide;
use Nextend\SmartSlider3\Slider\Slider;
class BlockSlideBox extends AbstractBlock {
use TraitAdminUrl;
protected $groupID = 0;
/** @var Slider */
protected $slider;
/** @var Slide */
protected $slide;
/** @var Optimize */
protected $optimize;
public function display() {
$this->renderTemplatePart('SlideBox');
}
/**
* @param int $groupID
*/
public function setGroupID($groupID) {
$this->groupID = $groupID;
}
/**
* @param Slider $slider
*/
public function setSlider($slider) {
$this->slider = $slider;
}
/**
* @param Slide $slide
*/
public function setSlide($slide) {
$this->slide = $slide;
}
/**
* @param Optimize $optimize
*/
public function setOptimize($optimize) {
$this->optimize = $optimize;
}
public function getSlideId() {
return $this->slide->id;
}
public function getSlideTitle() {
return $this->slide->getTitle(true);
}
public function getEditUrl() {
return $this->getUrlSlideEdit($this->slide->id,
$this->slider->sliderId, $this->groupID);
}
public function getThumbnailOptimized() {
$image = $this->slide->getThumbnailDynamic();
if (empty($image)) {
$image =
ResourceTranslator::toUrl('$ss3-frontend$/images/placeholder/image.png');
}
return $this->optimize->adminOptimizeThumbnail($image);
}
public function getPublishUrl() {
return $this->getUrlSlidePublish($this->slide->id,
$this->slider->sliderId, $this->groupID);
}
public function getUnPublishUrl() {
return $this->getUrlSlideUnPublish($this->slide->id,
$this->slider->sliderId, $this->groupID);
}
public function getClasses() {
$classes = array();
if ($this->slide->isStatic()) {
$classes[] = 'n2_slide_box--static-overlay';
}
if ($this->slide->isFirst()) {
$classes[] = 'n2_slide_box--first-slide';
}
if ($this->slide->published) {
$classes[] = 'n2_slide_box--published';
}
if ($this->slide->hasGenerator()) {
$classes[] = 'n2_slide_box--has-generator';
}
if ($this->slide->isCurrentlyEdited()) {
$classes[] = 'n2_slide_box--currently-edited';
}
return $classes;
}
public function isStaticSlide() {
return
!!$this->slide->parameters->get('static-slide', 0);
}
public function hasGenerator() {
return $this->slide->hasGenerator();
}
public function getGeneratorLabel() {
return $this->slide->getGeneratorLabel() . ' [' .
$this->slide->getSlideStat() . ']';
}
public function getGeneratorAttribute() {
if ($this->hasGenerator()) {
return ' data-generator-edit="' .
$this->getUrlGeneratorEdit($this->slide->generator_id,
$this->groupID) . '"';
}
return '';
}
public function getHiddenDeviceText() {
$hiddenViews = array();
if (!$this->slide->isVisibleDesktopLandscape()) {
$hiddenViews[] = n2_('Large desktop');
}
if (!$this->slide->isVisibleDesktopPortrait()) {
$hiddenViews[] = n2_('Desktop');
}
if (!$this->slide->isVisibleTabletLandscape()) {
$hiddenViews[] = n2_('Large tablet');
}
if (!$this->slide->isVisibleTabletPortrait()) {
$hiddenViews[] = n2_('Tablet');
}
if (!$this->slide->isVisibleMobileLandscape()) {
$hiddenViews[] = n2_('Large mobile');
}
if (!$this->slide->isVisibleMobilePortrait()) {
$hiddenViews[] = n2_('Mobile');
}
if (!empty($hiddenViews)) {
return sprintf(n2_('This slide is hidden on the following
devices: %s'), implode(', ', $hiddenViews));
}
return '';
}
}PK9e�[tiu���:Application/Admin/Layout/Block/Slide/SlideBox/SlideBox.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slide\SlideBox;
use Nextend\Framework\Sanitize;
/**
* @var BlockSlideBox $this
*/
?>
<div class="n2_slide_manager__box n2_slide_box <?php echo
implode(' ', $this->getClasses()) ?>"
data-slideid="<?php echo $this->getSlideId(); ?>"
<?php echo $this->getGeneratorAttribute(); ?>>
<div class="n2_slide_box__content"
style="background-image: URL('<?php echo
Sanitize::esc_attr($this->getThumbnailOptimized());
?>');">
<div class="n2_slide_box__slide_overlay">
<a class="n2_slide_box__slide_overlay_link"
href="<?php echo $this->getEditUrl(); ?>"></a>
<a class="n2_slide_box__slide_overlay_edit_button"
href="<?php echo $this->getEditUrl(); ?>">
<?php
n2_e('Edit');
?>
</a>
<div class="n2_slide_box__slide_select_tick">
<i class="ssi_16 ssi_16--check"></i>
</div>
<div class="n2_slide_box__slide_actions">
<a class="n2_slide_box__slide_action_more
n2_button_icon n2_button_icon--small n2_button_icon--grey-dark"
href="#"><i class="ssi_16
ssi_16--more"></i></a>
</div>
</div>
<div class="n2_slide_box__details">
<?php
if ($this->isStaticSlide()):
?>
<div
class="n2_slide_box__details_static_slide"><?php echo
n2_('Static overlay'); ?></div>
<?php
endif;
?>
<?php
if ($this->hasGenerator()):
?>
<div
class="n2_slide_box__details_generator"><?php echo
$this->getGeneratorLabel(); ?></div>
<?php
endif;
?>
</div>
</div>
<div class="n2_slide_box__footer">
<div class="n2_slide_box__footer_title">
<?php
echo Sanitize::esc_html($this->getSlideTitle());
?>
</div>
<div class="n2_slide_box__footer_status">
<?php
$hiddenViews = $this->getHiddenDeviceText();
?>
<a class="n2_slide_box__footer_status_hidden"
href="<?php echo $this->getEditUrl(); ?>"
data-n2tip="<?php echo $hiddenViews; ?>">
<i class="ssi_16 ssi_16--hide"></i>
</a>
<div
class="n2_slide_box__footer_status_first_slide"
data-n2tip="<?php n2_e('First slide'); ?>">
<i class="ssi_16 ssi_16--star"></i>
</div>
<a class="n2_slide_box__footer_status_published"
href="<?php echo $this->getUnPublishUrl(); ?>"
data-n2tip="<?php n2_e('Published'); ?>">
<i class="ssi_16
ssi_16--filledcheck"></i>
</a>
<a class="n2_slide_box__footer_status_unpublished"
href="<?php echo $this->getPublishUrl(); ?>"
data-n2tip="<?php n2_e('Unpublished'); ?>">
<i class="ssi_16
ssi_16--filledremove"></i>
</a>
</div>
</div>
</div>PK9e�[�؈"��IApplication/Admin/Layout/Block/Slide/SlideManager/ActionBar/ActionBar.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slide\SlideManager\ActionBar;
/**
* @var BlockActionBar $this
*/
?>
<div class="n2_slide_manager__action_bar">
<?php
$this->displayBulkActions();
?>
</div>
PK9e�[�[)+hhNApplication/Admin/Layout/Block/Slide/SlideManager/ActionBar/BlockActionBar.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slide\SlideManager\ActionBar;
use Nextend\Framework\View\AbstractBlock;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButtonPlain;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\FloatingMenu\BlockFloatingMenu;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\FloatingMenu\BlockFloatingMenuItem;
class BlockActionBar extends AbstractBlock {
/**
* @var BlockFloatingMenu
*/
protected $blockBulkActions;
public function display() {
$this->renderTemplatePart('ActionBar');
}
public function displayBulkActions() {
$this->blockBulkActions = new BlockFloatingMenu($this);
$this->blockBulkActions->setRelatedClass('n2_slide_manager__action_bar_bulk_actions');
$this->blockBulkActions->addClass('n2_slide_manager__action_bar_bulk_actions');
$this->blockBulkActions->setContentID('n2_slide_manager_bulk_actions');
$blockButton = new BlockButtonPlain($this);
$blockButton->setLabel(n2_('Bulk actions'));
$blockButton->setIcon('ssi_16 ssi_16--selectarrow');
$blockButton->setSmall();
$this->blockBulkActions->setButton($blockButton);
/**
* Bulk actions
*/
$class = 'n2_slide_manager__action_bar_bulk_action';
$this->createAction(n2_('Duplicate'),
'duplicate', $class);
$this->createAction(n2_('Copy'), 'copy',
$class);
$this->createAction(n2_('Delete'), 'delete',
$class)
->setRed();
$this->createAction(n2_('Publish'),
'publish', $class);
$this->createAction(n2_('Unpublish'),
'unpublish', $class);
$this->blockBulkActions->addSeparator(array(
'n2_slide_manager__action_bar_bulk_action'
));
/**
* Quick selection
*/
$this->createAction(n2_('Select all'),
'select-all', false, true);
$this->createAction(n2_('Select none'),
'select-none', false);
$this->createAction(n2_('Select published'),
'select-published', false, true);
$this->createAction(n2_('Select unpublished'),
'select-unpublished', false, true);
$this->blockBulkActions->display();
}
/**
* @param $label
* @param $action
* @param bool|string $class
* @param bool $stayOpen
*
* @return BlockFloatingMenuItem
*/
private function createAction($label, $action, $class = false,
$stayOpen = false) {
$item = new BlockFloatingMenuItem($this);
$item->setLabel($label);
$item->addAttribute('data-action', $action);
if ($class) {
$item->addClass($class);
}
if ($stayOpen) {
$item->setStayOpen();
}
$this->blockBulkActions->addMenuItem($item);
return $item;
}
}PK9e�[�A�C C GApplication/Admin/Layout/Block/Slide/SlideManager/AddSlide/AddSlide.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slide\SlideManager\AddSlide;
use Nextend\Framework\Platform\Platform;
/**
* @var $this BlockAddSlide
*/
?>
<div class="n2_slide_manager__add_slide_actions">
<div class="n2_slide_manager__add_slide_actions_inner">
<a href="#"
class="n2_slide_manager__add_slide_action
n2_slide_manager__add_slide_action--image"
data-action="image">
<div
class="n2_slide_manager__add_slide_action_icon">
<i class="ssi_48 ssi_48--image"></i>
</div>
<div
class="n2_slide_manager__add_slide_action_label"><?php
n2_e('Image'); ?></div>
</a>
<a href="#"
class="n2_slide_manager__add_slide_action
n2_slide_manager__add_slide_action--empty-slide"
data-action="empty-slide">
<div
class="n2_slide_manager__add_slide_action_icon">
<i class="ssi_48 ssi_48--empty"></i>
</div>
<div
class="n2_slide_manager__add_slide_action_label"><?php
n2_e('Blank'); ?></div>
</a>
<?php
if (Platform::hasPosts()) :
?>
<a href="#"
class="n2_slide_manager__add_slide_action
n2_slide_manager__add_slide_action--post"
data-action="post">
<div
class="n2_slide_manager__add_slide_action_icon">
<i class="ssi_48
ssi_48--post"></i>
</div>
<div
class="n2_slide_manager__add_slide_action_label"><?php
n2_e('Post'); ?></div>
</a>
<?php
endif;
?>
<a href="#"
class="n2_slide_manager__add_slide_action
n2_slide_manager__add_slide_action--static"
data-action="static-overlay">
<div
class="n2_slide_manager__add_slide_action_icon">
<i class="ssi_48 ssi_48--static"></i>
</div>
<div
class="n2_slide_manager__add_slide_action_label"><?php
n2_e('Static overlay'); ?></div>
</a>
<a href="<?php echo $this->getDynamicSlidesUrl();
?>" class="n2_slide_manager__add_slide_action
n2_slide_manager__add_slide_action--dynamic">
<div
class="n2_slide_manager__add_slide_action_icon">
<i class="ssi_48
ssi_48--dynamic"></i>
</div>
<div
class="n2_slide_manager__add_slide_action_label"><?php
n2_e('Dynamic slides'); ?></div>
</a>
</div>
</div>PK9e�[�1�՛�LApplication/Admin/Layout/Block/Slide/SlideManager/AddSlide/BlockAddSlide.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slide\SlideManager\AddSlide;
use Nextend\Framework\View\AbstractBlock;
use Nextend\SmartSlider3\Application\Admin\TraitAdminUrl;
class BlockAddSlide extends AbstractBlock {
use TraitAdminUrl;
protected $groupID = 0;
protected $sliderID = 0;
public function display() {
$this->renderTemplatePart('AddSlide');
}
/**
* @param int $groupID
*/
public function setGroupID($groupID) {
$this->groupID = $groupID;
}
/**
* @return int
*/
public function getSliderID() {
return $this->sliderID;
}
/**
* @param int $sliderID
*/
public function setSliderID($sliderID) {
$this->sliderID = $sliderID;
}
public function getDynamicSlidesUrl() {
return $this->getUrlGeneratorCreate($this->getSliderID(),
$this->groupID);
}
}PK9e�[��BY��GApplication/Admin/Layout/Block/Slide/SlideManager/BlockSlideManager.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slide\SlideManager;
use Nextend\Framework\Localization\Localization;
use Nextend\Framework\View\AbstractBlock;
use Nextend\SmartSlider3\Application\Admin\TraitAdminUrl;
use Nextend\SmartSlider3\Slider\Slider;
class BlockSlideManager extends AbstractBlock {
use TraitAdminUrl;
protected $groupID = 0;
/** @var integer */
protected $sliderID;
protected $breadcrumbOpener = false;
protected $classes = array(
'n2_slide_manager'
);
/**
* @return Slider
*/
public function getSliderObject() {
$sliderObj = new Slider($this, $this->sliderID, array(), true);
$sliderObj->initSlider();
return $sliderObj;
}
public function setGroupID($groupID) {
$this->groupID = $groupID;
}
public function setSliderID($sliderID) {
$this->sliderID = $sliderID;
}
public function display() {
$this->renderTemplatePart('SlideManager');
}
public function addClass($className) {
$this->classes[] = $className;
}
public function getClass() {
return implode(' ', $this->classes);
}
/**
* @return bool
*/
public function hasBreadcrumbOpener() {
return $this->breadcrumbOpener;
}
/**
* @param bool $breadcrumbOpener
*/
public function setBreadcrumbOpener($breadcrumbOpener) {
$this->breadcrumbOpener = $breadcrumbOpener;
}
}PK9e�[�%����BApplication/Admin/Layout/Block/Slide/SlideManager/SlideManager.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slide\SlideManager;
use Nextend\Framework\Asset\Js\Js;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slide\SlideBox\BlockSlideBox;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slide\SlideManager\ActionBar\BlockActionBar;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slide\SlideManager\AddSlide\BlockAddSlide;
use Nextend\SmartSlider3\Application\Model\ModelSlides;
use Nextend\SmartSlider3\Slider\Feature\Optimize;
use Nextend\SmartSlider3\Slider\Slide;
use Nextend\SmartSlider3\SmartSlider3Info;
/**
* @var $this BlockSlideManager
*/
$sliderObj = $this->getSliderObject();
$sliderType = $sliderObj->data->get('type',
'simple');
SmartSlider3Info::initLicense();
$slidesModel = new ModelSlides($this);
$slides = $slidesModel->getAll($sliderObj->sliderId);
$optimize = new Optimize($sliderObj);
$parameters = array();
$sliderEditUrl = $this->getUrlSliderEdit($sliderObj->sliderId,
$this->groupID);
$options = array(
'url' =>
$this->getUrlSlidesUniversal($sliderObj->sliderId,
$this->groupID),
'ajaxUrl' =>
$this->getAjaxUrlSlidesUniversal($sliderObj->sliderId,
$this->groupID),
'sliderUrl' => $sliderEditUrl,
'contentAjaxUrl' =>
$this->getAjaxUrlContentSearchContent()
);
Js::addInline('new _N2.SlidesManager(' . json_encode($options) .
', ' . json_encode($parameters) . ', ' .
(defined('N2_IMAGE_UPLOAD_DISABLE') ? 1 : 0) . ",
'" . $this->createAjaxUrl(array('browse/upload')) .
"', 'slider" . $sliderObj->sliderId .
"');");
Js::addGlobalInline('document.documentElement.setAttribute("data-slides",
"' . count($slides) . '");');
?>
<script>
<?php
if($this->hasBreadcrumbOpener()):
?>
_N2.r(['$', 'documentReady'], function () {
var $ = _N2.$;
var isVisible = false,
$editorOverLay = $('.n2_admin_editor_overlay'),
toggle = function () {
isVisible = !isVisible;
$editorOverLay.toggleClass('n2_admin_editor_overlay--show-slides',
isVisible);
},
hide = function () {
isVisible = true;
toggle();
},
$slideManager = $('.n2_slide_manager');
$('.n2_nav_bar__breadcrumb_button_slides').on('click',
toggle);
$slideManager.find('.n2_slide_manager__exit').on('click',
hide);
});
<?php
endif;
?>
</script>
<div class="<?php echo $this->getClass(); ?>"
data-breadcrumbopener="<?php echo $this->hasBreadcrumbOpener() ?
1 : 0; ?>">
<div class="n2_slide_manager__inner">
<?php
$addSlide = new BlockAddSlide($this);
$addSlide->setGroupID($this->groupID);
$addSlide->setSliderID($sliderObj->sliderId);
$addSlide->display();
$actionBar = new BlockActionBar($this);
$actionBar->display();
?>
<div class="n2_slide_manager__content">
<div class="n2_slide_manager__box
n2_slide_manager__add_slide">
<i class="n2_slide_manager__add_slide_icon ssi_48
ssi_48--plus"></i>
<div class="n2_slide_manager__add_slide_label
n2_slide_manager__add_slide_label--add-slide">
<?php echo n2_('Add slide'); ?>
</div>
<div class="n2_slide_manager__add_slide_label
n2_slide_manager__add_slide_label--close">
<?php echo n2_('Close'); ?>
</div>
</div>
<?php
if ($sliderType == 'block'):
?>
<div class="n2_slide_manager__box
n2_slide_manager__block_notice">
<div class="n2_slide_box__footer_title
n2_slide_manager__block_notice_description">
<?php echo n2_('Block must contain only one
slide. Need more?'); ?>
</div>
<a
class="n2_slide_manager__block_notice_button" href="<?php
echo $sliderEditUrl; ?>#changeslidertype">
<?php echo n2_('Convert to slider');
?>
</a>
</div>
<?php
endif;
$slidesObj = array();
foreach ($slides as $i => $slide) {
$slidesObj[$i] = new Slide($sliderObj, $slide);
$slidesObj[$i]->initGenerator();
}
foreach ($slidesObj as $slideObj) {
$slideObj->fillSample();
$blockSlideBox = new BlockSlideBox($this);
$blockSlideBox->setGroupID($this->groupID);
$blockSlideBox->setSlider($sliderObj);
$blockSlideBox->setSlide($slideObj);
$blockSlideBox->setOptimize($optimize);
$blockSlideBox->display();
}
?>
<div class="n2_slide_manager__box
n2_slide_manager__dummy_slide">
<i class="n2_slide_manager__dummy_slide_icon ssi_48
ssi_48--image"></i>
<div
class="n2_slide_manager__dummy_slide_label">
<?php echo n2_('Slide one'); ?>
</div>
</div>
<?php if ($sliderType != 'block'): ?>
<div class="n2_slide_manager__box
n2_slide_manager__dummy_slide">
<i class="n2_slide_manager__dummy_slide_icon
ssi_48 ssi_48--image"></i>
<div
class="n2_slide_manager__dummy_slide_label">
<?php echo n2_('Slide two'); ?>
</div>
</div>
<?php endif; ?>
<div class="n2_slide_manager__box
n2_slide_manager__dummy_slide">
<i class="n2_slide_manager__dummy_slide_icon ssi_48
ssi_48--drop"></i>
<div
class="n2_slide_manager__dummy_slide_label">
<?php echo n2_('Drop images here'); ?>
</div>
</div>
</div>
</div>
<?php if ($this->hasBreadcrumbOpener()): ?>
<div class="n2_slide_manager__exit"></div>
<?php endif; ?>
</div>
PK9e�[�P�C
DApplication/Admin/Layout/Block/Slider/DeviceZoom/BlockDeviceZoom.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slider\DeviceZoom;
use Nextend\Framework\View\AbstractBlock;
class BlockDeviceZoom extends AbstractBlock {
public function display() {
$this->renderTemplatePart('DeviceZoom');
}
}PK9e�[�E5&&?Application/Admin/Layout/Block/Slider/DeviceZoom/DeviceZoom.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slider\DeviceZoom;
/**
* @var $this BlockDeviceZoom
*/
?>
<div class="n2_device_changer">
<div class="n2_device_changer__button">
<i class="ssi_24 ssi_24--desktop"></i>
</div>
<div class="n2_device_tester"></div>
</div>
<script>
_N2.r(['$', 'documentReady'], function () {
var $ = _N2.$;
var timeout,
$el = $('.n2_device_tester_hover')
.on({
mouseenter: function () {
if (timeout) {
clearTimeout(timeout);
timeout = undefined
}
$el.addClass('n2_device_tester_hover--hover');
},
mouseleave: function () {
timeout = setTimeout(function () {
$el.removeClass('n2_device_tester_hover--hover');
}, 400);
}
});
});
</script>PK9e�[GS
WWBApplication/Admin/Layout/Block/Slider/SliderBox/BlockSliderBox.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slider\SliderBox;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\Framework\View\AbstractBlock;
use Nextend\SmartSlider3\Application\Admin\TraitAdminUrl;
class BlockSliderBox extends AbstractBlock {
use TraitAdminUrl;
protected $groupID = 0;
/** @var array */
protected $slider;
public function display() {
$this->renderTemplatePart('SliderBox');
}
/**
* @return array
*/
public function getSlider() {
return $this->slider;
}
/**
* @param array $slider
*/
public function setSlider($slider) {
$this->slider = $slider;
}
public function getEditUrl() {
return $this->getUrlSliderEdit($this->slider['id'],
$this->groupID);
}
public function getSimpleEditUrl() {
return
$this->getUrlSliderSimpleEdit($this->slider['id'],
$this->groupID);
}
public function isGroup() {
return $this->slider['type'] == 'group';
}
public function getSliderTitle() {
return $this->slider['title'];
}
public function getSliderID() {
return $this->slider['id'];
}
public function hasSliderAlias() {
return !empty($this->slider['alias']);
}
public function getSliderAlias() {
return $this->slider['alias'];
}
public function getThumbnail() {
$thumbnail = $this->slider['thumbnail'];
if (empty($thumbnail)) {
return '';
} else {
return ResourceTranslator::toUrl($thumbnail);
}
}
public function isThumbnailEmpty() {
return empty($this->slider['thumbnail']);
}
public function getChildrenCount() {
if ($this->slider['slides'] > 0) {
return $this->slider['slides'];
}
return 0;
}
/**
* @return int
*/
public function getGroupID() {
return $this->groupID;
}
/**
* @param int $groupID
*/
public function setGroupID($groupID) {
$this->groupID = $groupID;
}
}PK9e�[�9��=Application/Admin/Layout/Block/Slider/SliderBox/SliderBox.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slider\SliderBox;
use Nextend\Framework\Sanitize;
/**
* @var BlockSliderBox $this
*/
?>
<div class="n2_slider_manager__box n2_slider_box<?php echo
$this->isGroup() ? ' n2_slider_box--group' : '
n2_slider_box--slider'; ?>"
data-group="<?php echo $this->isGroup() ? '1' :
'0'; ?>"
data-title="<?php echo
Sanitize::esc_attr($this->getSliderTitle()); ?>"
data-sliderid="<?php echo $this->getSliderID();
?>">
<?php
$thumbnailUrl = Sanitize::esc_attr($this->getThumbnail());
$thumbnailStyle = '';
if (!empty($thumbnailUrl)) {
$thumbnailStyle = "background-image: url('" .
$thumbnailUrl . "');";
}
?>
<div class="n2_slider_box__content" style="<?php
echo $thumbnailStyle; ?>">
<?php
if ($this->isThumbnailEmpty()):
$icon = "ssi_64 ssi_64--image";
if ($this->isGroup()) {
$icon = "ssi_64 ssi_64--folder";
}
?>
<div class="n2_slider_box__icon">
<div class="n2_slider_box__icon_container">
<i class="<?php echo $icon;
?>"></i>
</div>
</div>
<?php
endif;
?>
<div class="n2_slider_box__slider_overlay">
<a class="n2_slider_box__slider_overlay_link"
href="<?php echo $this->getEditUrl(); ?>"></a>
<a class="n2_slider_box__slider_overlay_edit_button
n2_button n2_button--small n2_button--green" href="<?php echo
$this->getEditUrl(); ?>">
<?php
n2_e('Edit');
?>
</a>
<div class="n2_slider_box__slider_select_tick">
<i class="ssi_16 ssi_16--check"></i>
</div>
</div>
<div class="n2_slider_box__slider_identifiers">
<div class="n2_slider_box__slider_identifier">
<?php
echo '#' . $this->getSliderID();
?>
</div>
<?php
if ($this->isGroup()):
?>
<div
class="n2_slider_box__slider_identifier">
<?php
n2_e('Group');
?>
</div>
<?php
endif;
?>
<?php
if ($this->hasSliderAlias()):
?>
<div
class="n2_slider_box__slider_identifier">
<?php
echo $this->getSliderAlias();
?>
</div>
<?php
endif;
?>
</div>
<div class="n2_slider_box__slider_actions">
<a class="n2_slider_box__slider_action_more
n2_button_icon n2_button_icon--small n2_button_icon--grey-dark"
href="#"><i class="ssi_16
ssi_16--more"></i></a>
</div>
</div>
<div class="n2_slider_box__footer">
<?php
if ($this->isGroup()):
?>
<div class="n2_slider_box__footer_icon">
<i class="ssi_16
ssi_16--folderclosed"></i>
</div>
<?php
endif;
?>
<div class="n2_slider_box__footer_title">
<?php
echo Sanitize::esc_html($this->getSliderTitle());
?>
</div>
<div class="n2_slider_box__footer_children_count">
<?php
echo $this->getChildrenCount();
?>
</div>
</div>
<a class="n2_slide_box__screen_reader" href="<?php
echo $this->getSimpleEditUrl(); ?>">
<?php
echo n2_('Edit slider') . ': ' .
Sanitize::esc_html($this->getSliderTitle());
?>
</a>
</div>
PK9e�[���KApplication/Admin/Layout/Block/Slider/SliderManager/ActionBar/ActionBar.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slider\SliderManager\ActionBar;
/**
* @var BlockActionBar $this
*/
?>
<div class="n2_slider_manager__action_bar">
<div class="n2_slider_manager__action_bar_left">
<?php
$this->displayOrderBy();
$this->displayBulkActions();
$this->displayCreateGroup();
?>
</div>
<div class="n2_slider_manager__action_bar_right">
<?php
$this->displayTrash();
?>
</div>
</div>
PK9e�[{�%JaaPApplication/Admin/Layout/Block/Slider/SliderManager/ActionBar/BlockActionBar.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slider\SliderManager\ActionBar;
use Nextend\Framework\View\AbstractBlock;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButtonPlain;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\FloatingMenu\BlockFloatingMenu;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\FloatingMenu\BlockFloatingMenuItem;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slider\SliderManager\BlockSliderManager;
use Nextend\SmartSlider3\Application\Admin\TraitAdminUrl;
class BlockActionBar extends AbstractBlock {
use TraitAdminUrl;
/**
* @var BlockSliderManager
*/
protected $sliderManager;
public function display() {
$this->renderTemplatePart('ActionBar');
}
/**
* @param BlockSliderManager $sliderManager
*/
public function setSliderManager($sliderManager) {
$this->sliderManager = $sliderManager;
}
public function displayCreateGroup() {
if ($this->sliderManager->getGroupID() == 0) {
$blockButton = new BlockButtonPlain($this);
$blockButton->setLabel(n2_('Create group'));
$blockButton->addClass('n2_slider_create_group');
$blockButton->setSmall();
$blockButton->setColorBlue();
$blockButton->setTabIndex(-1);
$blockButton->display();
}
}
public function displayTrash() {
if ($this->sliderManager->getGroupID() == 0) {
$blockButton = new BlockButtonPlain($this);
$blockButton->setUrl($this->getUrlTrash());
$blockButton->setLabel(n2_('View trash'));
$blockButton->setSmall();
$blockButton->setTabIndex(-1);
$blockButton->display();
}
}
public function displayOrderBy() {
if ($this->sliderManager->getGroupID() == 0) {
$orderBy = $this->sliderManager->getOrderBy();
$orderByDirection =
$this->sliderManager->getOrderByDirection();
$blockOrderBy = new BlockFloatingMenu($this);
$blockButton = new BlockButtonPlain($this);
$blockButton->setLabel(n2_('Order by'));
$blockButton->setIcon('ssi_16
ssi_16--selectarrow');
$blockButton->setSmall();
$blockOrderBy->setButton($blockButton);
$manualOrder = new BlockFloatingMenuItem($this);
$manualOrder->setLabel(n2_('Manual order'));
$manualOrder->setIsActive($orderBy == 'ordering'
&& $orderByDirection == 'ASC');
$manualOrder->setUrl($this->getUrlDashboardOrderBy('ordering',
'ASC'));
$blockOrderBy->addMenuItem($manualOrder);
$orderAZ = new BlockFloatingMenuItem($this);
$orderAZ->setLabel(n2_('A-Z'));
$orderAZ->setIsActive($orderBy == 'title'
&& $orderByDirection == 'ASC');
$orderAZ->setUrl($this->getUrlDashboardOrderBy('title',
'ASC'));
$blockOrderBy->addMenuItem($orderAZ);
$orderZA = new BlockFloatingMenuItem($this);
$orderZA->setLabel(n2_('Z-A'));
$orderZA->setIsActive($orderBy == 'title'
&& $orderByDirection == 'DESC');
$orderZA->setUrl($this->getUrlDashboardOrderBy('title',
'DESC'));
$blockOrderBy->addMenuItem($orderZA);
$orderNewest = new BlockFloatingMenuItem($this);
$orderNewest->setLabel(n2_('Newest first'));
$orderNewest->setIsActive($orderBy == 'time'
&& $orderByDirection == 'DESC');
$orderNewest->setUrl($this->getUrlDashboardOrderBy('time',
'DESC'));
$blockOrderBy->addMenuItem($orderNewest);
$orderOldest = new BlockFloatingMenuItem($this);
$orderOldest->setLabel(n2_('Oldest first'));
$orderOldest->setIsActive($orderBy == 'time'
&& $orderByDirection == 'ASC');
$orderOldest->setUrl($this->getUrlDashboardOrderBy('time',
'ASC'));
$blockOrderBy->addMenuItem($orderOldest);
$blockOrderBy->display();
}
}
public function displayBulkActions() {
$blockBulkActions = new BlockFloatingMenu($this);
$blockBulkActions->setRelatedClass('n2_slider_manager__action_bar_bulk_actions');
$blockBulkActions->addClass('n2_slider_manager__action_bar_bulk_actions');
$blockBulkActions->setContentID('n2_slider_manager_bulk_actions');
$blockButton = new BlockButtonPlain($this);
$blockButton->setLabel(n2_('Bulk actions'));
$blockButton->setIcon('ssi_16 ssi_16--selectarrow');
$blockButton->setSmall();
$blockBulkActions->setButton($blockButton);
$duplicate = new BlockFloatingMenuItem($this);
$duplicate->addClass('n2_slider_manager__action_bar_bulk_action');
$duplicate->setLabel(n2_('Duplicate'));
$duplicate->addAttribute('data-action',
'duplicate');
$blockBulkActions->addMenuItem($duplicate);
$trash = new BlockFloatingMenuItem($this);
$trash->setRed();
$trash->addClass('n2_slider_manager__action_bar_bulk_action');
$trash->setLabel(n2_('Move to trash'));
$trash->addAttribute('data-action',
'trash');
$blockBulkActions->addMenuItem($trash);
$export = new BlockFloatingMenuItem($this);
$export->addClass('n2_slider_manager__action_bar_bulk_action');
$export->setLabel(n2_('Export'));
$export->addAttribute('data-action',
'export');
$blockBulkActions->addMenuItem($export);
$blockBulkActions->addSeparator(array(
'n2_slider_manager__action_bar_bulk_action'
));
$selectAll = new BlockFloatingMenuItem($this);
$selectAll->setLabel(n2_('Select all'));
$selectAll->addAttribute('data-action',
'select-all');
$selectAll->setStayOpen();
$blockBulkActions->addMenuItem($selectAll);
$selectNone = new BlockFloatingMenuItem($this);
$selectNone->setLabel(n2_('Select none'));
$selectNone->addAttribute('data-action',
'select-none');
$blockBulkActions->addMenuItem($selectNone);
$blockBulkActions->display();
}
}PK9e�[?11JApplication/Admin/Layout/Block/Slider/SliderManager/BlockSliderManager.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slider\SliderManager;
use Nextend\Framework\Localization\Localization;
use Nextend\Framework\View\AbstractBlock;
use Nextend\SmartSlider3\Application\Model\ModelSliders;
use Nextend\SmartSlider3\Settings;
class BlockSliderManager extends AbstractBlock {
protected $groupID = 0;
protected $orderBy = 'ordering';
protected $orderByDirection = 'ASC';
public function display() {
if ($this->groupID > 0) {
$this->orderBy = 'ordering';
$this->orderByDirection = 'ASC';
} else {
$this->orderBy =
Settings::get('slidersOrder2', 'ordering');
$this->orderByDirection =
Settings::get('slidersOrder2Direction', 'ASC');
}
$this->renderTemplatePart('SliderManager');
}
/**
* @return int
*/
public function getGroupID() {
return $this->groupID;
}
/**
* @param int $groupID
*/
public function setGroupID($groupID) {
$this->groupID = $groupID;
}
public function getSliders($status = '*') {
$slidersModel = new ModelSliders($this);
return $slidersModel->getAll($this->groupID, $status,
$this->orderBy, $this->orderByDirection);
}
/**
* @return string
*/
public function getOrderBy() {
return $this->orderBy;
}
/**
* @return string
*/
public function getOrderByDirection() {
return $this->orderByDirection;
}
}PK9e�[�oL��EApplication/Admin/Layout/Block/Slider/SliderManager/SliderManager.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slider\SliderManager;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slider\SliderBox\BlockSliderBox;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slider\SliderManager\ActionBar\BlockActionBar;
/**
* @var BlockSliderManager $this
*/
$groupID = $this->getGroupID();
$orderBy = $this->getOrderBy();
$orderByDirection = $this->getOrderByDirection();
$sliders = $this->getSliders('published');
?>
<div class="n2_slider_manager" data-groupid="<?php
echo $groupID; ?>" data-orderby="<?php echo $orderBy;
?>" data-orderbydirection="<?php echo $orderByDirection;
?>">
<?php
$actionBar = new BlockActionBar($this);
$actionBar->setSliderManager($this);
$actionBar->display();
?>
<div class="n2_slider_manager__content">
<div class="n2_slider_manager__box
n2_slider_manager__new_slider">
<i class="n2_slider_manager__new_slider_icon ssi_48
ssi_48--plus"></i>
<span
class="n2_slider_manager__new_slider_label">
<?php echo n2_('New project'); ?>
</span>
</div>
<?php
foreach ($sliders as $sliderObj) {
$blockSliderBox = new BlockSliderBox($this);
$blockSliderBox->setGroupID($groupID);
$blockSliderBox->setSlider($sliderObj);
$blockSliderBox->display();
}
?>
</div>
</div>PK9e�[C���ccJApplication/Admin/Layout/Block/Slider/SliderPublish/BlockPublishSlider.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slider\SliderPublish;
use Nextend\Framework\View\AbstractBlock;
class BlockPublishSlider extends AbstractBlock {
/** @var int */
protected $sliderID;
public function display() {
$this->renderTemplatePart('Common');
$this->renderTemplatePart('Joomla');
}
/**
* @return int
*/
public function getSliderID() {
return $this->sliderID;
}
/**
* @param int $sliderID
*/
public function setSliderID($sliderID) {
$this->sliderID = $sliderID;
}
}PK9e�[��q�>Application/Admin/Layout/Block/Slider/SliderPublish/Common.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slider\SliderPublish;
/**
* @var $this BlockPublishSlider
*/
?>
<script>
_N2.r(['$', 'documentReady'], function () {
var $ = _N2.$;
$('.n2_ss_slider_publish__option_code')
.on('click', function (e) {
var element = e.currentTarget;
if (document.selection) {
var range = body.createTextRange();
range.moveToElementText(this);
range.select();
} else if (window.getSelection) {
var range = document.createRange();
range.selectNode(element);
var selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(range);
}
return false;
});
document.addEventListener('copy', function (e) {
if
($(e.target).hasClass('n2_ss_slider_publish__option_code')) {
try {
e.clipboardData.setData('text/plain',
window.getSelection().toString());
e.clipboardData.setData('text/html',
'<div>' + window.getSelection().toString() +
'</div>');
e.preventDefault();
} catch (e) {
}
}
});
});
</script>
PK9e�[;Z�Խ�>Application/Admin/Layout/Block/Slider/SliderPublish/Joomla.phpnu�[���<?php
/**
* @required N2JOOMLA
*/
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slider\SliderPublish;
/**
* @var $this BlockPublishSlider
*/
$sliderID = $this->getSliderID();
$publishData = new JoomlaPublishSlider($sliderID);
$modules = $publishData->getModuleList();
?>
<div class="n2_ss_slider_publish">
<div class="n2_ss_slider_publish__option">
<div
class="n2_ss_slider_publish__option_label"><?php
n2_e('Module'); ?></div>
<div
class="n2_ss_slider_publish__option_description"><?php
n2_e('Displays the slider in a template module position.');
?></div>
<a class="n2_button n2_button--big n2_button--green"
href="<?php echo $publishData->getCreateModuleLink();
?>" target="_blank"><span
class="n2_button__label"><?php n2_e('Create
module') ?></span></a>
</div>
<?php if (!empty($modules)): ?>
<div class="n2_ss_slider_publish__option">
<div
class="n2_ss_slider_publish__option_label"><?php
n2_e('Related modules'); ?></div>
<div
class="n2_ss_slider_publish__related_modules">
<?php foreach ($modules AS $module): ?>
<a class="n2_button n2_button--small
n2_button--grey" href="<?php echo $module['url'];
?>" target="_blank"><?php echo
$module['label']; ?></a>
<?php endforeach; ?>
</div>
</div>
<?php endif; ?>
<div class="n2_ss_slider_publish__option">
<div
class="n2_ss_slider_publish__option_label"><?php
n2_e('Articles'); ?></div>
<div
class="n2_ss_slider_publish__option_description"><?php
n2_e('Paste the code into article:'); ?></div>
<div class="n2_ss_slider_publish__option_code"
dir="ltr">
smartslider3[<?php echo $sliderID; ?>]
</div>
</div>
<div class="n2_ss_slider_publish__option">
<div
class="n2_ss_slider_publish__option_label"><?php
n2_e('PHP code'); ?></div>
<div
class="n2_ss_slider_publish__option_description"><?php
n2_e('Paste the PHP code into source code:'); ?></div>
<div class="n2_ss_slider_publish__option_code"
dir="ltr">
<?php <br>echo nextend_smartslider3(<?php echo
$sliderID; ?>);<br>?>
</div>
</div>
</div>PK9e�['w��KApplication/Admin/Layout/Block/Slider/SliderPublish/JoomlaPublishSlider.phpnu�[���<?php
/**
* @required N2JOOMLA
*/
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slider\SliderPublish;
use JComponentHelper;
use JFactory;
use Nextend\Framework\Database\Database;
class JoomlaPublishSlider {
protected $db;
protected $sliderID;
protected $moduleType;
public function __construct($sliderID) {
$this->sliderID = $sliderID;
$this->db = Database::getInstance();
$this->moduleType =
JComponentHelper::getComponent('com_advancedmodules',
true)->enabled ? 'com_advancedmodules' :
'com_modules';
}
public function getCreateModuleLink() {
$ss3Module = $this->db->queryRow("SELECT extension_id
FROM `#__extensions` WHERE `element` LIKE
'mod_smartslider3'");
if (count($ss3Module)) {
return 'index.php?option=' . $this->moduleType .
'&task=module.add&eid=' .
$ss3Module['extension_id'] . '¶ms[slider]=' .
$this->sliderID;
} else {
return 'index.php?option=' . $this->moduleType .
'&view=select';
}
}
public function getModuleList() {
$modulesData = array();
$modules = $this->db->queryAll("SELECT * FROM
`#__modules` WHERE `module` LIKE 'mod_smartslider3' AND `params`
LIKE '%\"slider\":\"" . $this->sliderID .
"\"%'");
if (count($modules)) {
$list = '<ul>';
$IDs = array();
foreach ($modules AS $module) {
$IDs[] = intval($module['id']);
$modulesData[] = array(
'url' => 'index.php?option=' .
$this->moduleType . '&view=module&layout=edit&id='
. $module['id'],
'label' => $module['title']
);
$list .= '
<li>
<a href="index.php?option=' .
$this->moduleType . '&view=module&layout=edit&id='
. $module['id'] . '"
target="_blank">' . $module['title'] .
'</a>
</li>';
}
$context = 'com_modules.edit.module';
$app = JFactory::getApplication();
$app->setUserState($context . '.id', $IDs);
}
return $modulesData;
}
}PK9e�[O+j??AApplication/Admin/Layout/Block/Slider/SliderPublish/WordPress.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slider\SliderPublish;
use Nextend\SmartSlider3\Application\Model\ModelSliders;
/**
* @var $this BlockPublishSlider
*/
$model = new ModelSliders($this);
$slider = $model->get($this->getSliderID());
?>
<div class="n2_ss_slider_publish">
<div class="n2_ss_slider_publish__option">
<div
class="n2_ss_slider_publish__option_label"><?php
n2_e('Shortcode'); ?></div>
<div
class="n2_ss_slider_publish__option_description"><?php
n2_e('Copy and paste this shortcode into your posts or pages:');
?></div>
<div class="n2_ss_slider_publish__option_code"
data-mode="id" dir="ltr">
[smartslider3 slider="<?php echo
$this->getSliderID(); ?>"]
</div>
<?php if (!empty($slider['alias'])): ?>
<div class="n2_ss_slider_publish__option_code"
data-mode="alias" dir="ltr">
[smartslider3 alias="<?php echo
$slider['alias']; ?>"]
</div>
<?php endif; ?>
</div>
<div class="n2_ss_slider_publish__option">
<div
class="n2_ss_slider_publish__option_label"><?php
n2_e('Pages and Posts'); ?></div>
<?php
$pageBuilders = array(
'Gutenberg',
'Classic Editor',
'Elementor',
'Divi',
'Beaver Builder',
'Visual Composer',
'WPBakery Page Builder'
);
?>
<div
class="n2_ss_slider_publish__option_description"><?php
printf(n2_('Smart Slider 3 has integration with %s.'),
implode(', ', $pageBuilders)); ?></div>
</div>
<div class="n2_ss_slider_publish__option">
<div
class="n2_ss_slider_publish__option_label"><?php
n2_e('PHP code'); ?></div>
<div
class="n2_ss_slider_publish__option_description"><?php
n2_e('Paste the PHP code into your theme\'s file:');
?></div>
<div class="n2_ss_slider_publish__option_code"
dir="ltr">
<?php <br>
echo do_shortcode('[smartslider3 slider="<?php
echo $this->getSliderID(); ?>"]');<br>
?>
</div>
</div>
</div>PK9e�[�5y��FApplication/Admin/Layout/Block/Slider/SliderTrash/BlockSliderTrash.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slider\SliderTrash;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\Framework\View\AbstractBlock;
use Nextend\SmartSlider3\Application\Admin\TraitAdminUrl;
use Nextend\SmartSlider3\Application\Model\ModelSliders;
class BlockSliderTrash extends AbstractBlock {
use TraitAdminUrl;
/** @var array */
protected $slider;
public function display() {
$options = array(
'ajaxUrl' =>
$this->getAjaxUrlSlidesCreate(),
'previewUrl' => $this->getUrlPreviewIndex(0)
);
Js::addInline("new _N2.SlidersTrash(" .
json_encode($options) . ");");
$this->renderTemplatePart('SliderTrash');
}
public function getSliders() {
$slidersModel = new ModelSliders($this);
return $slidersModel->getAll('*', 'trash');
}
/**
* @param array $slider
*/
public function setSlider($slider) {
$this->slider = $slider;
}
public function isGroup() {
return $this->slider['type'] == 'group';
}
public function getSliderTitle() {
return $this->slider['title'];
}
public function getSliderID() {
return $this->slider['id'];
}
public function hasSliderAlias() {
return !empty($this->slider['alias']);
}
public function getSliderAlias() {
return $this->slider['alias'];
}
public function getThumbnail() {
$thumbnail = $this->slider['thumbnail'];
if (empty($thumbnail)) {
return '';
} else {
return ResourceTranslator::toUrl($thumbnail);
}
}
public function isThumbnailEmpty() {
return empty($this->slider['thumbnail']);
}
public function getChildrenCount() {
if ($this->slider['slides'] > 0) {
return $this->slider['slides'];
}
return 0;
}
}PK9e�[���s��IApplication/Admin/Layout/Block/Slider/SliderTrash/BlockSliderTrashBox.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slider\SliderTrash;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\Framework\View\AbstractBlock;
use Nextend\SmartSlider3\Application\Admin\TraitAdminUrl;
class BlockSliderTrashBox extends AbstractBlock {
use TraitAdminUrl;
protected $groupID = 0;
/** @var array */
protected $slider;
public function display() {
$this->renderTemplatePart('SliderTrashBox');
}
/**
* @return array
*/
public function getSlider() {
return $this->slider;
}
/**
* @param array $slider
*/
public function setSlider($slider) {
$this->slider = $slider;
}
public function getEditUrl() {
return $this->getUrlSliderEdit($this->slider['id'],
$this->groupID);
}
public function isGroup() {
return $this->slider['type'] == 'group';
}
public function getSliderTitle() {
return $this->slider['title'];
}
public function getSliderID() {
return $this->slider['id'];
}
public function hasSliderAlias() {
return !empty($this->slider['alias']);
}
public function getSliderAlias() {
return $this->slider['alias'];
}
public function getThumbnail() {
$thumbnail = $this->slider['thumbnail'];
if (empty($thumbnail)) {
return '';
} else {
return ResourceTranslator::toUrl($thumbnail);
}
}
public function isThumbnailEmpty() {
return empty($this->slider['thumbnail']);
}
public function getChildrenCount() {
if ($this->slider['slides'] > 0) {
return $this->slider['slides'];
}
return 0;
}
/**
* @return int
*/
public function getGroupID() {
return $this->groupID;
}
/**
* @param int $groupID
*/
public function setGroupID($groupID) {
$this->groupID = $groupID;
}
}PK9e�[ZR��AApplication/Admin/Layout/Block/Slider/SliderTrash/SliderTrash.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slider\SliderTrash;
/**
* @var BlockSliderTrash $this
*/
$sliders = $this->getSliders();
?>
<div class="n2_slider_trash">
<div class="n2_slider_manager__box
n2_slider_manager__dummy_slider">
<i class="n2_slider_manager__dummy_slider_icon ssi_48
ssi_48--delete"></i>
<div class="n2_slider_manager__dummy_slider_label">
<?php n2_e('Trash is empty.'); ?>
</div>
</div>
<?php
foreach ($sliders as $sliderObj) {
$blockSliderBox = new BlockSliderTrashBox($this);
$blockSliderBox->setSlider($sliderObj);
$blockSliderBox->display();
}
?>
</div>
PK9e�[W��``DApplication/Admin/Layout/Block/Slider/SliderTrash/SliderTrashBox.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slider\SliderTrash;
use Nextend\Framework\Sanitize;
/**
* @var BlockSliderTrashBox $this
*/
?>
<div class="n2_slider_manager__box n2_slider_box<?php echo
$this->isGroup() ? ' n2_slider_box--group' : '
n2_slider_box--slider'; ?>"
data-group="<?php echo $this->isGroup() ? '1' :
'0'; ?>"
data-sliderid="<?php echo $this->getSliderID();
?>">
<?php
$thumbnailUrl = Sanitize::esc_attr($this->getThumbnail());
$thumbnailStyle = '';
if (!empty($thumbnailUrl)) {
$thumbnailStyle = "background-image: url('" .
$thumbnailUrl . "');";
}
?>
<div class="n2_slider_box__content" style="<?php
echo $thumbnailStyle; ?>">
<?php
if ($this->isThumbnailEmpty()):
$icon = "ssi_64 ssi_64--image";
if ($this->isGroup()) {
$icon = "ssi_64 ssi_64--folder";
}
?>
<div class="n2_slider_box__icon">
<div class="n2_slider_box__icon_container">
<i class="<?php echo $icon;
?>"></i>
</div>
</div>
<?php
endif;
?>
<div class="n2_slider_box__slider_overlay">
<a class="n2_slider_box__slider_overlay_restore_button
n2_button n2_button--small n2_button--green" href="#">
<?php
n2_e('Restore');
?>
</a>
</div>
<div class="n2_slider_box__slider_identifiers">
<div class="n2_slider_box__slider_identifier">
<?php
echo '#' . $this->getSliderID();
?>
</div>
<?php
if ($this->isGroup()):
?>
<div
class="n2_slider_box__slider_identifier">
<?php
echo 'GROUP';
?>
</div>
<?php
endif;
?>
<?php
if ($this->hasSliderAlias()):
?>
<div
class="n2_slider_box__slider_identifier">
<?php
echo $this->getSliderAlias();
?>
</div>
<?php
endif;
?>
</div>
<div class="n2_slider_box__slider_actions">
<a class="n2_slider_box__slider_action_more
n2_button_icon n2_button_icon--small n2_button_icon--grey-dark"
href="#"><i class="ssi_16
ssi_16--more"></i></a>
</div>
</div>
<div class="n2_slider_box__footer">
<?php
if ($this->isGroup()):
?>
<div class="n2_slider_box__footer_icon">
<i class="ssi_16
ssi_16--folderclosed"></i>
</div>
<?php
endif;
?>
<div class="n2_slider_box__footer_title">
<?php
echo Sanitize::esc_html($this->getSliderTitle());
?>
</div>
<div class="n2_slider_box__footer_children_count">
<?php
echo $this->getChildrenCount();
?>
</div>
</div>
</div>
PK9e�[W���%%.Application/Admin/Layout/Helper/Breadcrumb.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Layout\Helper;
class Breadcrumb {
protected $label = '';
protected $icon = '';
protected $url = '#';
protected $isActive = false;
protected $classes =
array('n2_breadcrumbs__breadcrumb_button');
public function __construct($label, $icon, $url = '#') {
$this->label = $label;
$this->icon = $icon;
$this->url = $url;
}
/**
* @param bool $isActive
*/
public function setIsActive($isActive) {
$this->isActive = $isActive;
}
/**
* @return bool
*/
public function isActive() {
return $this->isActive;
}
public function display() {
$html = '';
if (!empty($this->icon)) {
$html .= '<i class="' . $this->icon .
'"></i>';
}
$html .= '<span>' . $this->label .
'</span>';
if ($this->url == '#') {
echo '<div class="' . $this->getClass() .
'">' . $html . '</div>';
} else {
echo '<a class="' . $this->getClass() .
'" href="' . $this->url . '">' .
$html . '</a>';
}
}
protected function getClass() {
return implode(' ', $this->classes);
}
public function addClass($className) {
$this->classes[] = $className;
}
}PK9e�[�J����,Application/Admin/Layout/Helper/MenuItem.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Layout\Helper;
class MenuItem {
protected $html = '';
protected $isActive = false;
public function __construct($html, $isActive = false) {
$this->html = $html;
$this->isActive = $isActive;
}
/**
* @return bool
*/
public function isActive() {
return $this->isActive;
}
public function display() {
echo $this->html;
}
}PK9e�[�;9��*Application/Admin/Layout/LayoutDefault.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Layout;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\Admin\BlockAdmin;
class LayoutDefault extends AbstractLayoutMenu {
protected $subNavigation = '';
protected $topBar = '';
public function render() {
$admin = new BlockAdmin($this);
$admin->setLayout($this);
foreach ($this->state AS $name => $value) {
$admin->setAttribute('data-' . $name, $value);
}
$admin->addClasses($this->getClasses());
$admin->setHeader($this->getHeader());
$admin->setSubNavigation($this->subNavigation);
$admin->setTopBar($this->topBar);
$admin->display();
}
/**
* @param string $subNavigation
*/
public function setSubNavigation($subNavigation) {
$this->subNavigation = $subNavigation;
}
/**
* @param string $topBar
*/
public function setTopBar($topBar) {
$this->topBar = $topBar;
}
}PK9e�[�M�XX1Application/Admin/Layout/LayoutDefaultSidebar.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Layout;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\Admin\BlockAdmin;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\ContentSidebar\BlockContentSidebar;
class LayoutDefaultSidebar extends AbstractLayoutMenu {
protected $sidebar = array();
protected function enqueueAssets() {
$this->getApplicationType()
->enqueueAssets();
}
public function addSidebarBlock($html) {
$this->sidebar[] = $html;
}
public function renderSidebarBlock() {
echo $this->getSidebarBlock();
}
public function getSidebarBlock() {
return implode("\n\n", $this->sidebar);
}
public function render() {
$admin = new BlockAdmin($this);
$admin->setLayout($this);
$admin->addClasses($this->getClasses());
$admin->setHeader($this->getHeader());
$content = new BlockContentSidebar($this);
$content->setSidebar($this->getSidebarBlock());
$this->addContentBlock($content);
$admin->display();
}
}PK9e�[%�d55)Application/Admin/Layout/LayoutEditor.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Layout;
use Nextend\Framework\View\AbstractLayout;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\AdminEditor\BlockAdminEditor;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\BlockBreadCrumb\BlockBreadCrumb;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slide\EditorOverlay\BlockEditorOverlay;
use Nextend\SmartSlider3\Application\Admin\Layout\Helper\Breadcrumb;
use Nextend\SmartSlider3\Application\Admin\TraitAdminUrl;
class LayoutEditor extends AbstractLayout {
use TraitAdminUrl;
/**
* @var BlockEditorOverlay
*/
protected $editorOverlay;
/**
* @var BlockBreadCrumb
*/
protected $blockBreadCrumb;
public function render() {
$admin = new BlockAdminEditor($this);
$admin->setLayout($this);
foreach ($this->state AS $name => $value) {
$admin->setAttribute('data-' . $name, $value);
}
$admin->setEditorOverlay($this->editorOverlay);
$admin->display();
}
/**
* @param $label
* @param $icon
* @param string $url
*
* @return Breadcrumb
*/
public function addBreadcrumb($label, $icon, $url = '#') {
return $this->blockBreadCrumb->addBreadcrumb($label, $icon,
$url);
}
/**
* @param BlockEditorOverlay $editorOverlay
*/
public function setEditorOverlay($editorOverlay) {
$this->editorOverlay = $editorOverlay;
$this->blockBreadCrumb =
$editorOverlay->getBlockBreadCrumb();
}
}PK9e�[��`:��(Application/Admin/Layout/LayoutEmpty.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Layout;
use Nextend\Framework\View\AbstractLayout;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\AdminEmpty\BlockAdminEmpty;
class LayoutEmpty extends AbstractLayout {
public function render() {
$admin = new BlockAdminEmpty($this);
$admin->setLayout($this);
$admin->display();
}
}PK9e�[̤�0(Application/Admin/Layout/LayoutError.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Layout;
use Nextend\Framework\View\AbstractLayout;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\AdminError\BlockAdminError;
class LayoutError extends AbstractLayout {
protected $title, $content, $url = '';
/**
* Override to prevent backend JS load
*/
protected function enqueueAssets() {
}
public function setError($title, $content, $url = '') {
$this->title = $title;
$this->content = $content;
$this->url = $url;
}
public function render() {
$adminError = new BlockAdminError($this);
$adminError->setLayout($this);
$adminError->setError($this->title, $this->content,
$this->url);
$adminError->display();
}
}PK9e�[��Zqq)Application/Admin/Layout/LayoutIframe.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Layout;
use Nextend\Framework\View\AbstractBlock;
use Nextend\Framework\View\AbstractLayout;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\AdminIframe\BlockAdminIframe;
class LayoutIframe extends AbstractLayout {
protected $label = '';
/**
* @var AbstractBlock[]
*/
protected $actions = array();
public function render() {
$admin = new BlockAdminIframe($this);
$admin->setLayout($this);
$admin->setLabel($this->label);
$admin->setActions($this->actions);
$admin->display();
}
/**
* @param string $label
*/
public function setLabel($label) {
$this->label = $label;
}
/**
* @param AbstractBlock $block
*/
public function addAction($block) {
$this->actions[] = $block;
}
}PK9e�[�c~��FApplication/Admin/Preview/Block/PreviewToolbar/BlockPreviewToolbar.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Preview\Block\PreviewToolbar;
use Nextend\Framework\View\AbstractBlock;
use Nextend\SmartSlider3\Application\Admin\TraitAdminUrl;
class BlockPreviewToolbar extends AbstractBlock {
use TraitAdminUrl;
/** @var integer */
protected $sliderID;
public function display() {
$this->renderTemplatePart('PreviewToolbar');
}
/**
* @return int
*/
public function getSliderID() {
return $this->sliderID;
}
/**
* @param int $sliderID
*/
public function setSliderID($sliderID) {
$this->sliderID = $sliderID;
}
}PK9e�[�T��mmAApplication/Admin/Preview/Block/PreviewToolbar/PreviewToolbar.phpnu�[���<?php
namespace
Nextend\SmartSlider3\Application\Admin\Preview\Block\PreviewToolbar;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButtonPlainIcon;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButtonSpacer;
/**
* @var $this BlockPreviewToolbar
*/
?>
<div class="n2_preview_toolbar">
<div class="n2_preview_toolbar__size">
<div class="n2_preview_toolbar__editable
n2_preview_toolbar__width">
1200
</div>
<div class="n2_preview_toolbar__x">
X
</div>
<div class="n2_preview_toolbar__editable
n2_preview_toolbar__height">
800
</div>
</div>
<select class="n2_preview_toolbar__scale">
<option value="25">25%</option>
<option value="50">50%</option>
<option value="75">75%</option>
<option value="100" selected>100%</option>
<option value="125">125%</option>
<option value="150">150%</option>
</select>
<?php
$buttonOrientation = new BlockButtonPlainIcon($this);
$buttonOrientation->addClass('n2_button_preview_orientation');
$buttonOrientation->addAttribute('data-n2tip',
n2_('Toggle orientation'));
$buttonOrientation->setBig();
$buttonOrientation->setIcon('ssi_24 ssi_24--orientation');
$buttonOrientation->display();
$spacer = new BlockButtonSpacer($this);
$spacer->setIsVisible(true);
$spacer->display();
$buttonReload = new BlockButtonPlainIcon($this);
$buttonReload->addClass('n2_button_preview_reload');
$buttonReload->addAttribute('data-n2tip', n2_('Reload
preview'));
$buttonReload->setBig();
$buttonReload->setIcon('ssi_24 ssi_24--redo');
$buttonReload->display();
$buttonFullPreview = new BlockButtonPlainIcon($this);
$buttonFullPreview->setUrl($this->getUrlPreviewFull($this->getSliderID()));
$buttonFullPreview->addAttribute('data-n2tip',
n2_('Open preview in full'));
$buttonFullPreview->setTarget('_blank');
$buttonFullPreview->setBig();
$buttonFullPreview->setIcon('ssi_24 ssi_24--newwindow');
$buttonFullPreview->display();
?>
</div>
PK9e�[!���/Application/Admin/Preview/ControllerPreview.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Preview;
use Nextend\Framework\Misc\Base64;
use Nextend\Framework\Localization\Localization;
use Nextend\Framework\Request\Request;
use Nextend\SmartSlider3\Application\Admin\AbstractControllerAdmin;
use Nextend\SmartSlider3\Application\Model\ModelGenerator;
use Nextend\SmartSlider3\Application\Model\ModelSlides;
use Nextend\SmartSlider3\SmartSlider3Info;
class ControllerPreview extends AbstractControllerAdmin {
private $sliderId = 0;
public function initialize() {
parent::initialize();
$this->sliderId =
Request::$REQUEST->getInt('sliderid');
SmartSlider3Info::$forceDesktop = true;
}
public function actionIndex() {
if ($this->validateToken() &&
$this->validatePermission('smartslider_edit')) {
$view = new ViewPreviewIndex($this);
$view->setSliderID($this->sliderId);
$sliderData = Request::$POST->getVar('slider',
false);
if (!is_array($sliderData)) {
$sliderData = false;
}
$view->setSliderData($sliderData);
$view->display();
} else {
$this->permissionError();
}
}
public function actionFull() {
if ($this->validateToken()) {
$view = new ViewPreviewFull($this);
$view->setSliderData(json_decode(Request::$POST->getVar('sliderData',
'[]'), true));
$view->setSlidesData(json_decode(Request::$POST->getVar('slidesData',
'[]'), true));
$view->setGeneratorData(json_decode(Request::$POST->getVar('generatorData',
'[]'), true));
$view->setSliderID($this->sliderId);
$view->display();
} else {
$this->permissionError();
}
}
public function actionSlider() {
if ($this->validateToken() &&
$this->validatePermission('smartslider_edit')) {
$view = new ViewPreviewIndex($this);
$view->setIsIframe(true);
$view->setSliderID($this->sliderId);
$sliderData = Request::$POST->getVar('slider',
false);
if (!is_array($sliderData)) {
$sliderData = false;
}
$view->setSliderData($sliderData);
$view->display();
} else {
$this->permissionError();
}
}
public function actionSlide() {
if ($this->validateToken() &&
$this->validatePermission('smartslider_edit')) {
$slideId = Request::$REQUEST->getInt('slideId');
if ($this->sliderId) {
$slidesData = array();
$slidesModel = new ModelSlides($this);
$slideData =
Request::$REQUEST->getVar('slide');
if (!empty($slideData)) {
$slide =
$slidesModel->convertSlideDataToDatabaseRow(json_decode(Base64::decode($slideData),
true));
$slide['slide'] =
json_encode($slide['slide']);
$slide['params'] =
json_encode($slide['params']);
if ($slideId) {
$slide['id'] = $slideId;
$slidesData[$slideId] = $slide;
}
}
$view = new ViewPreviewIndex($this);
if (Request::$REQUEST->getVar('frame')) {
$view->setIsIframe(true);
}
$view->setSliderID($this->sliderId);
$view->setSlidesData($slidesData);
$view->display();
}
} else {
$this->permissionError();
}
}
public function actionGenerator() {
if ($this->validateToken() &&
$this->validatePermission('smartslider_edit')) {
$generator_id =
Request::$REQUEST->getInt('generator_id');
$generatorModel = new ModelGenerator($this);
$sliderID =
$generatorModel->getSliderId($generator_id);
if ($sliderID) {
$generatorData = array();
$generatorData[$generator_id] =
Request::$REQUEST->getVar('generator');
$view = new ViewPreviewIndex($this);
$view->setIsIframe(true);
$view->setSliderID($sliderID);
$view->setGeneratorData($generatorData);
$view->display();
}
} else {
$this->permissionError();
}
}
private function permissionError() {
$this->redirectToSliders();
}
}PK9e�[��x��+Application/Admin/Preview/Template/Full.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Preview;
use Nextend\Framework\Asset\Js\Js;
use Nextend\SmartSlider3\Settings;
/**
* @var $this ViewPreviewFull
*/
JS::addGlobalInline('document.documentElement.classList.add("n2_html--application-only");');
JS::addGlobalInline('document.documentElement.classList.add("n2_html--slider-preview");');
$slider = $this->renderSlider();
$externals = Settings::get('external-css-files');
if (!empty($externals)) {
$externals = explode("\n", $externals);
foreach ($externals as $external) {
echo "<link rel='stylesheet' href='" .
$external . "' type='text/css'
media='all'>";
}
}
echo $slider;
$slidesData = $this->getSlidesData();
if (!empty($slidesData)) {
$slideId = key($slidesData);
if ($slideId > 0) {
?>
<script>
n2ss.ready(<?php echo $this->getSliderID(); ?>,
function (slider) {
slider.visible(function () {
slider.slideToID(<?php echo key($slidesData);
?>);
});
});
</script>
<?php
}
}
?>
<script>
document.addEventListener('keydown', function (e) {
if (e.key === 'Escape') {
parent.postMessage(JSON.stringify({action:
'cancel'}), "*");
}
});
if (window.parent !== window) {
_N2.r(['$', 'documentReady'], function () {
var $ = _N2.$,
html = document.documentElement,
body = document.body,
$sliders = $('.n2-ss-slider');
function syncDeviceDetails() {
$sliders.each(function () {
var match =
$(this).attr('id').match(/n2-ss-([0-9]+)/);
if (match) {
n2ss.ready(match[1], function (slider) {
slider.stages.done('Show', function
() {
syncDeviceDetailsSlider(slider);
});
});
}
});
}
function syncDeviceDetailsSlider(slider) {
var breakpoints = slider.responsive.parameters.breakpoints,
breakpoint, screenWidthLimit, maxWidth = -1, minWidth =
0, hadMinScreenWidth = false, i;
for (i = breakpoints.length - 1; i >= 0; i--) {
breakpoint = breakpoints[i];
screenWidthLimit = slider.responsive.isLandscape ?
breakpoint.landscapeWidth : breakpoint.portraitWidth;
if (breakpoint.type === 'max-screen-width') {
minWidth = maxWidth + 1;
maxWidth = screenWidthLimit;
} else if (breakpoint.type ===
'min-screen-width') {
hadMinScreenWidth = true;
if (slider.responsive.device ===
'desktopPortrait') {
maxWidth = screenWidthLimit - 1;
} else {
minWidth = screenWidthLimit;
maxWidth = 100000;
}
}
if (breakpoint.device === slider.responsive.device) {
break;
}
}
if (!hadMinScreenWidth && slider.responsive.device
=== 'desktopPortrait') {
minWidth = screenWidthLimit + 1;
maxWidth = 100000;
}
window.parent.postMessage(
JSON.stringify({
action: 'device_info',
data: {
id: slider.id,
top:
slider.sliderElement.getBoundingClientRect().top +
document.documentElement.scrollTop,
device: slider.responsive.device,
isLandscape: slider.responsive.isLandscape,
minScreenWidth: minWidth,
maxScreenWidth: maxWidth
}
}),
"*"
);
}
if (window.ResizeObserver !== undefined) {
var observer = new ResizeObserver((function () {
syncDeviceDetails();
}).bind(this));
observer.observe(body);
} else {
try {
/**
* We can detect every width changes with a dummy
iframe.
*/
$('<iframe sandbox="allow-same-origin
allow-scripts"
style="position:absolute;left:0;top:0;margin:0;padding:0;border:0;display:block;width:100%;height:100%;min-height:0;max-height:none;z-index:10;"></iframe>')
.on('load', function (e) {
$(e.target.contentWindow ?
e.target.contentWindow : e.target.contentDocument.defaultView)
.on('resize', function () {
syncDeviceDetails();
});
})
.appendTo(body);
} catch (e) {
}
}
n2ss.on('SliderDeviceOrientation', function (slider)
{
syncDeviceDetailsSlider(slider);
})
function broadcastScrollTop(scrollTop) {
window.parent.postMessage(
JSON.stringify({
action: 'scrollTop',
data: {
scrollTop: scrollTop
}
}),
"*"
);
}
document.addEventListener('scroll', function () {
broadcastScrollTop(html.scrollTop || body.scrollTop);
}, {
passive: true,
capture: true
});
broadcastScrollTop(html.scrollTop || body.scrollTop);
});
}
</script>PK9e�[�*����,Application/Admin/Preview/Template/Index.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Preview;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\Sanitize;
/**
* @var $this ViewPreviewIndex
*/
JS::addGlobalInline('document.documentElement.classList.add("n2_html--application-only");');
Js::addFirstCode("new _N2.SliderPreview();");
?>
<div class="n2_preview">
<form target="n2_preview__device_screen_inner_frame"
action="<?php echo
$this->getUrlPreviewFull($this->getSliderID()); ?>"
method="post">
<input type="hidden" name="sliderData"
value="<?php echo
Sanitize::esc_attr(json_encode($this->sliderData)); ?>">
<input type="hidden" name="slidesData"
value="<?php echo
Sanitize::esc_attr(json_encode($this->slidesData)); ?>">
<input type="hidden" name="generatorData"
value="<?php echo
Sanitize::esc_attr(json_encode($this->generatorData)); ?>">
</form>
<div class="n2_preview__ruler">
<div class="n2_preview__ruler_label"></div>
</div>
<div class="n2_preview__device_info">
<div class="n2_preview__device_info_label"><?php
n2_e('State'); ?>: </div>
<div class="n2_preview__device_info_state"><?php
n2_e('Desktop'); ?></div>
<i class="ssi_16 ssi_16--info"
data-tip-description="" data-tip-label="<?php
n2_e('Reason'); ?>"></i>
</div>
<div class="n2_preview__device_screen">
<div class="n2_preview__device_screen_inner"
style="<?php echo $this->getWidthCSS(); ?>">
<iframe
name="n2_preview__device_screen_inner_frame"></iframe>
<div
class="n2_preview__frame_overlay"></div>
<div class="n2_preview__resize_width">
</div>
<div class="n2_preview__resize_height">
</div>
</div>
</div>
</div>PK9e�[4>$���-Application/Admin/Preview/ViewPreviewFull.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Preview;
use Nextend\Framework\View\AbstractView;
use Nextend\SmartSlider3\Application\Admin\Layout\LayoutEmpty;
use Nextend\SmartSlider3\SliderManager\SliderManager;
class ViewPreviewFull extends AbstractView {
/** @var integer */
protected $sliderID;
/** @var array */
protected $sliderData;
/** @var array */
protected $slidesData;
/** @var array */
protected $generatorData;
public function display() {
$this->layout = new LayoutEmpty($this);
$this->layout->addContent($this->render('Full'));
$this->layout->render();
}
/**
* @return int
*/
public function getSliderID() {
return $this->sliderID;
}
/**
* @param int $sliderID
*/
public function setSliderID($sliderID) {
$this->sliderID = $sliderID;
}
/**
* @return array
*/
public function getSliderData() {
return $this->sliderData;
}
/**
* @param array $sliderData
*/
public function setSliderData($sliderData) {
$this->sliderData = $sliderData;
}
/**
* @return array
*/
public function getSlidesData() {
return $this->slidesData;
}
/**
* @param array $slidesData
*/
public function setSlidesData($slidesData) {
$this->slidesData = $slidesData;
}
/**
* @return array
*/
public function getGeneratorData() {
return $this->generatorData;
}
/**
* @param array $generatorData
*/
public function setGeneratorData($generatorData) {
$this->generatorData = $generatorData;
}
public function renderSlider() {
$locale = setlocale(LC_NUMERIC, 0);
setlocale(LC_NUMERIC, "C");
$sliderManager = new SliderManager($this, $this->sliderID, true,
array(
'sliderData' => $this->sliderData,
'slidesData' => $this->slidesData,
'generatorData' => $this->generatorData
));
$sliderManager->allowDisplayWhenEmpty();
$sliderHTML = $sliderManager->render();
setlocale(LC_NUMERIC, $locale);
return $sliderHTML;
}
}PK9e�[l
.Application/Admin/Preview/ViewPreviewIndex.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Preview;
use Nextend\Framework\View\AbstractView;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButton;
use Nextend\SmartSlider3\Application\Admin\Layout\LayoutIframe;
use
Nextend\SmartSlider3\Application\Admin\Preview\Block\PreviewToolbar\BlockPreviewToolbar;
use Nextend\SmartSlider3\Application\Admin\Settings\ViewSettingsGeneral;
use Nextend\SmartSlider3\Application\Admin\TraitAdminUrl;
use Nextend\SmartSlider3\Application\Model\ModelSliders;
use Nextend\SmartSlider3\Settings;
use Nextend\SmartSlider3\Slider\SliderParams;
class ViewPreviewIndex extends AbstractView {
use TraitAdminUrl;
/** @var integer */
protected $sliderID;
/** @var array */
protected $sliderData = array();
/** @var array */
protected $slidesData = array();
/** @var array */
protected $generatorData = array();
protected $isIframe = false;
public function display() {
$this->layout = new LayoutIframe($this);
$this->layout->setLabel(n2_('Preview'));
$blockPreviewToolbar = new BlockPreviewToolbar($this);
$blockPreviewToolbar->setSliderID($this->sliderID);
$this->layout->addAction($blockPreviewToolbar);
if ($this->isIframe) {
$buttonClose = new BlockButton($this);
$buttonClose->addClass('n2_preview_slider__close');
$buttonClose->setLabel(n2_('Close'));
$buttonClose->setBig();
$buttonClose->setGreyDark();
$this->layout->addAction($buttonClose);
}
$this->layout->addContent($this->render('Index'));
$this->layout->render();
}
/**
* @return int
*/
public function getSliderID() {
return $this->sliderID;
}
/**
* @param int $sliderID
*/
public function setSliderID($sliderID) {
$this->sliderID = $sliderID;
}
/**
* @return array
*/
public function getSliderData() {
return $this->sliderData;
}
/**
* @param array $sliderData
*/
public function setSliderData($sliderData) {
$this->sliderData = $sliderData;
}
public function getWidthCSS() {
if ($this->sliderData) {
$sliderParams = new SliderParams($this->sliderID,
$this->sliderData['type'], $this->sliderData);
} else {
$model = new ModelSliders($this);
$slider = $model->get($this->sliderID);
$sliderParams = new SliderParams($this->sliderID,
$slider['type'], $slider['params'], true);
}
if ($sliderParams->get('responsive-mode') ==
'fullwidth' || $sliderParams->get('responsive-mode')
== 'fullpage') {
return '';
}
$minScreenWidth = $sliderParams->get('width');
if
(intval($sliderParams->get('responsive-breakpoint-tablet-landscape-enabled',
0))) {
$useLocalBreakpoints =
!$sliderParams->get('responsive-breakpoint-global', 0);
$minScreenWidth = max($minScreenWidth, 1 +
intval($useLocalBreakpoints ?
$sliderParams->get('responsive-breakpoint-tablet-landscape',
ViewSettingsGeneral::defaults['tablet-large-portrait']) :
Settings::get('responsive-screen-width-tablet-landscape',
ViewSettingsGeneral::defaults['tablet-large-portrait'])));
$minScreenWidth = max($minScreenWidth, 1 +
($useLocalBreakpoints ?
$sliderParams->get('responsive-breakpoint-tablet-landscape-landscape',
ViewSettingsGeneral::defaults['tablet-large-landscape']) :
Settings::get('responsive-screen-width-tablet-landscape-landscape',
ViewSettingsGeneral::defaults['tablet-large-landscape'])));
}
if
(intval($sliderParams->get('responsive-breakpoint-tablet-portrait-enabled',
0))) {
$useLocalBreakpoints =
!$sliderParams->get('responsive-breakpoint-global', 0);
$minScreenWidth = max($minScreenWidth, 1 +
intval($useLocalBreakpoints ?
$sliderParams->get('responsive-breakpoint-tablet-portrait',
ViewSettingsGeneral::defaults['tablet-portrait']) :
Settings::get('responsive-screen-width-tablet-portrait',
ViewSettingsGeneral::defaults['tablet-portrait'])));
$minScreenWidth = max($minScreenWidth, 1 +
intval($useLocalBreakpoints ?
$sliderParams->get('responsive-breakpoint-tablet-portrait-landscape',
ViewSettingsGeneral::defaults['tablet-landscape']) :
Settings::get('responsive-screen-width-tablet-portrait-landscape',
ViewSettingsGeneral::defaults['tablet-landscape'])));
}
return 'max-width:' . $minScreenWidth . 'px;';
}
/**
* @return array
*/
public function getSlidesData() {
return $this->slidesData;
}
/**
* @param array $slidesData
*/
public function setSlidesData($slidesData) {
$this->slidesData = $slidesData;
}
/**
* @return array
*/
public function getGeneratorData() {
return $this->generatorData;
}
/**
* @param array $generatorData
*/
public function setGeneratorData($generatorData) {
$this->generatorData = $generatorData;
}
/**
* @return bool
*/
public function isIframe() {
return $this->isIframe;
}
/**
* @param bool $isIframe
*/
public function setIsIframe($isIframe) {
$this->isIframe = $isIframe;
}
}PK9e�[l�p]3Application/Admin/Settings/AbstractViewSettings.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Settings;
use Nextend\Framework\View\AbstractView;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\Header\BlockHeader;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\Header\MenuItem;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\TopBarMain\BlockTopBarMain;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButtonSave;
use Nextend\SmartSlider3\Application\Admin\Layout\LayoutDefault;
use Nextend\SmartSlider3\Application\Admin\TraitAdminUrl;
use Nextend\SmartSlider3\Generator\GeneratorFactory;
abstract class AbstractViewSettings extends AbstractView {
use TraitAdminUrl;
protected $active = 'general';
/** @var LayoutDefault */
protected $layout;
/**
* @var BlockHeader
*/
protected $blockHeader;
public function display() {
$this->layout = new LayoutDefault($this);
$this->layout->addBreadcrumb(n2_('Settings'),
'ssi_16 ssi_16--cog', $this->getUrlSettingsDefault());
$this->displayTopBar();
$this->displayHeader();
}
protected function displayTopBar() {
$topBar = new BlockTopBarMain($this);
$buttonSave = new BlockButtonSave($this);
$buttonSave->addClass('n2_button--inactive');
$buttonSave->addClass('n2_settings_save');
$topBar->addPrimaryBlock($buttonSave);
$this->layout->setTopBar($topBar->toHTML());
}
protected function displayHeader() {
$this->blockHeader = new BlockHeader($this);
$this->blockHeader->setHeading(n2_('Settings'));
$general = new MenuItem(n2_('General'));
$general->setUrl($this->getUrlSettingsDefault());
$general->setActive($this->active == 'general');
$this->blockHeader->addMenuItem($general);
$framework = new MenuItem(n2_('Framework'));
$framework->setUrl($this->getUrlSettingsFramework());
$framework->setActive($this->active ==
'framework');
$this->blockHeader->addMenuItem($framework);
$fonts = new MenuItem(n2_('Fonts'));
$fonts->setUrl($this->getUrlSettingsFonts());
$fonts->setActive($this->active == 'fonts');
$this->blockHeader->addMenuItem($fonts);
$itemDefaults = new MenuItem(n2_('Layer defaults'));
$itemDefaults->setUrl($this->getUrlSettingsItemDefaults());
$itemDefaults->setActive($this->active ==
'itemDefaults');
$this->blockHeader->addMenuItem($itemDefaults);
foreach (GeneratorFactory::getGenerators() as $generator) {
if ($generator->hasConfiguration()) {
$generators = new MenuItem(n2_('Generators'));
$generators->setUrl($this->getUrlSettingsGenerator($generator->getName()));
$this->blockHeader->addMenuItem($generators);
break;
}
}
$this->addHeaderActions();
$this->layout->addContentBlock($this->blockHeader);
}
protected function addHeaderActions() {
}
}PK9e�[���ג�5Application/Admin/Settings/ControllerAjaxSettings.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Settings;
use Nextend\Framework\Cache\AbstractCache;
use Nextend\Framework\Cache\CacheImage;
use Nextend\Framework\Controller\Admin\AdminAjaxController;
use Nextend\Framework\Data\Data;
use Nextend\Framework\Filesystem\Filesystem;
use Nextend\Framework\Font\FontSettings;
use Nextend\Framework\Model\StorageSectionManager;
use Nextend\Framework\Notification\Notification;
use Nextend\Framework\Request\Request;
use Nextend\Framework\Settings;
use Nextend\SmartSlider3\Application\Admin\TraitAdminUrl;
use Nextend\SmartSlider3\Application\Model\ModelGenerator;
use Nextend\SmartSlider3\Application\Model\ModelSettings;
use Nextend\SmartSlider3\Application\Model\ModelSliders;
class ControllerAjaxSettings extends AdminAjaxController {
use TraitAdminUrl;
public function actionDefault() {
$this->validateToken();
$this->validatePermission('smartslider_config');
$settingsModel = new ModelSettings($this);
if ($settingsModel->save()) {
$this->invalidateSliderCache();
Notification::success(n2_('Saved and slider cache
invalidated.'));
}
$this->response->redirect($this->getUrlSettingsDefault());
}
public function actionFramework() {
$this->validateToken();
$this->validatePermission('smartslider_config');
$data = Request::$POST->getVar('global');
if (is_array($data)) {
Settings::setAll($data);
$this->invalidateSliderCache();
Notification::success(n2_('Saved and slider cache
invalidated.'));
}
$this->response->redirect($this->getUrlSettingsFramework());
}
public function actionFonts() {
$this->validateToken();
$this->validatePermission('smartslider_config');
$fonts = Request::$REQUEST->getVar('fonts', false);
if ($fonts) {
FontSettings::store($fonts);
$this->invalidateSliderCache();
Notification::success(n2_('Saved and slider cache
invalidated.'));
}
$this->response->redirect($this->getUrlSettingsFonts());
}
public function actionItemDefaults() {
$this->validateToken();
$this->validatePermission('smartslider_config');
$settingsModel = new ModelSettings($this);
$settingsModel->saveDefaults(Request::$REQUEST->getVar('defaults',
array()));
$this->response->redirect($this->getUrlSettingsItemDefaults());
}
public function actionGeneratorConfigure() {
$this->validateToken();
$this->validatePermission('smartslider_config');
$group = Request::$REQUEST->getVar('group');
$this->validateVariable($group, 'group');
$generatorModel = new ModelGenerator($this);
$generatorGroup = $generatorModel->getGeneratorGroup($group);
$configuration = $generatorGroup->getConfiguration();
$configuration->addData(Request::$POST->getVar('generator'));
$this->response->redirect($this->getUrlSettingsGenerator($generatorGroup->getName()));
}
public function actionDismissUpgradePro() {
$this->validateToken();
$storage =
StorageSectionManager::getStorage('smartslider');
$storage->set('free', 'upgrade-pro', 1);
$this->response->respond();
}
public function actionRated() {
$this->validateToken();
$storage =
StorageSectionManager::getStorage('smartslider');
$storage->set('free', 'rated', 1);
$this->response->respond();
}
public function actionDismissNewsletterSampleSliders() {
$this->validateToken();
$storage =
StorageSectionManager::getStorage('smartslider');
$storage->set('free',
'dismissNewsletterSampleSliders', 1);
$this->response->respond();
}
public function actionDismissNewsletterDashboard() {
$this->validateToken();
$storage =
StorageSectionManager::getStorage('smartslider');
$storage->set('free',
'dismissNewsletterDashboard', 1);
$this->response->respond();
}
public function actionSubscribed() {
$this->validateToken();
$storage =
StorageSectionManager::getStorage('smartslider');
$storage->set('free', 'subscribeOnImport',
1);
$this->response->respond();
}
private function invalidateSliderCache() {
$slidersModel = new ModelSliders($this);
$slidersModel->invalidateCache();
}
public function actionClearCache() {
$this->validateToken();
$this->validatePermission('smartslider_config');
$formData = new
Data(Request::$POST->getVar('clear_cache', array()));
if ($formData->get('delete-image-cache')) {
$imageCachePath = CacheImage::getStorage()
->getPath('slider/cache', '', 'image');
if (Filesystem::existsFolder($imageCachePath) &&
Filesystem::is_writable($imageCachePath)) {
Filesystem::deleteFolder($imageCachePath);
}
}
$slidersModel = new ModelSliders($this);
foreach ($slidersModel->_getAll() as $slider) {
$slidersModel->refreshCache($slider['id']);
}
AbstractCache::clearGroup('n2-ss-0');
AbstractCache::clearGroup('combined');
AbstractCache::clearAll();
Notification::success(n2_('Cache cleared.'));
Request::redirect($this->getUrlSettingsDefault());
}
}PK9e�[4�"�
1Application/Admin/Settings/ControllerSettings.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Settings;
use Nextend\Framework\Notification\Notification;
use Nextend\Framework\Request\Request;
use Nextend\Framework\Settings;
use Nextend\SmartSlider3\Application\Admin\AbstractControllerAdmin;
use Nextend\SmartSlider3\Application\Model\ModelGenerator;
use Nextend\SmartSlider3\Application\Model\ModelSliders;
class ControllerSettings extends AbstractControllerAdmin {
public function actionDefault() {
if ($this->validatePermission('smartslider_config')) {
$view = new ViewSettingsGeneral($this);
$view->display();
}
}
public function actionFramework() {
if ($this->canDo('smartslider_config')) {
$data = Request::$POST->getVar('global');
if (is_array($data)) {
if ($this->validateToken()) {
Settings::setAll($data);
$this->invalidateSliderCache();
Notification::success(n2_('Saved and slider cache
invalidated.'));
}
$this->redirect($this->getUrlSettingsFramework());
}
$view = new ViewSettingsFramework($this);
$view->display();
}
}
public function actionFonts() {
if ($this->canDo('smartslider_config')) {
$view = new ViewSettingsFonts($this);
$view->display();
}
}
public function actionItemDefaults() {
if ($this->validatePermission('smartslider_config')) {
$view = new ViewSettingsItemDefaults($this);
$view->display();
}
}
public function actionGeneratorConfigure() {
if ($this->validatePermission('smartslider_config')) {
$view = new ViewGeneratorConfigure($this);
$generatorModel = new ModelGenerator($this);
$group = Request::$REQUEST->getVar('group');
$generatorGroup =
$generatorModel->getGeneratorGroup($group);
$configuration = $generatorGroup->getConfiguration();
$view->setGeneratorGroup($generatorGroup);
$view->setConfiguration($configuration);
$view->display();
}
}
public function actionClearCache() {
if ($this->validatePermission('smartslider_config')) {
$view = new ViewSettingsClearCache($this);
$view->display();
}
}
private function invalidateSliderCache() {
$slidersModel = new ModelSliders($this);
$slidersModel->invalidateCache();
}
}PK9e�[G����2Application/Admin/Settings/Template/ClearCache.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Settings;
/**
* @var $this ViewSettingsClearCache
*/
?>
<form id="n2_slider_clear_cache_form" action="<?php
echo $this->getAjaxUrlSettingsClearCache(); ?>"
method="post">
<?php
$this->renderForm();
?>
</form>
<script>
document.querySelector('.n2_slider_clear_cache').addEventListener('click',
function () {
document.getElementById('n2_slider_clear_cache_form').submit();
});
</script>PK9e�[�P�,__-Application/Admin/Settings/Template/Fonts.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Settings;
use Nextend\Framework\Asset\Js\Js;
/**
* @var $this ViewSettingsFonts
*/
JS::addInline('new _N2.SettingsFonts();');
?>
<form id="n2-ss-form-settings-fonts" method="post"
action="<?php echo $this->getAjaxUrlSettingsFonts();
?>">
<?php
$this->renderForm();
?>
</form>
PK9e�[4��mm1Application/Admin/Settings/Template/Framework.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Settings;
use Nextend\Framework\Asset\Js\Js;
/**
* @var $this ViewSettingsFramework
*/
JS::addInline('new _N2.SettingsFramework();');
?>
<form id="n2-ss-form-settings-framework"
method="post" action="<?php echo
$this->getAjaxUrlSettingsFramework(); ?>">
<?php
$this->renderForm();
?>
</form>
PK9e�[���6ff/Application/Admin/Settings/Template/General.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Settings;
use Nextend\Framework\Asset\Js\Js;
/**
* @var $this ViewSettingsGeneral
*/
JS::addInline('new _N2.SettingsGeneral();');
?>
<form id="n2-ss-form-settings-general" action="<?php
echo $this->getAjaxUrlSettingsDefault(); ?>"
method="post">
<?php
$this->renderForm();
?>
</form>PK9e�[&�+B"":Application/Admin/Settings/Template/GeneratorConfigure.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Settings;
use Nextend\Framework\Asset\Js\Js;
/**
* @var ViewGeneratorConfigure $this
*/
JS::addInline('new _N2.GeneratorConfigure();');
?>
<form id="n2-ss-form-generator-configure"
action="<?php echo
$this->getAjaxUrlSettingsGenerator($this->getGeneratorGroup()
->getName()); ?>"
method="post">
<?php
echo $this->renderForm();
?>
</form>
<div style="height:
200px"></div>PK9e�[U�b�{{4Application/Admin/Settings/Template/ItemDefaults.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Settings;
use Nextend\Framework\Asset\Js\Js;
/**
* @var $this ViewSettingsItemDefaults
*/
JS::addInline('new _N2.SettingsItemDefaults();');
?>
<form id="n2-ss-form-settings-item-defaults"
action="<?php echo $this->getAjaxUrlSettingsItemDefaults();
?>" method="post">
<?php
$this->renderForm();
?>
</form>PK9e�[V���
5Application/Admin/Settings/ViewGeneratorConfigure.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Settings;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\Header\BlockHeader;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\Header\MenuItem;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\TopBarMain\BlockTopBarMain;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButtonSave;
use Nextend\SmartSlider3\Generator\AbstractGeneratorGroup;
use Nextend\SmartSlider3\Generator\AbstractGeneratorGroupConfiguration;
use Nextend\SmartSlider3\Generator\GeneratorFactory;
class ViewGeneratorConfigure extends AbstractViewSettings {
protected $active = 'generator';
/** @var AbstractGeneratorGroup */
protected $generatorGroup;
/** @var AbstractGeneratorGroupConfiguration */
protected $configuration;
public function display() {
parent::display();
$this->layout->addBreadcrumb($this->generatorGroup->getLabel(),
'');
$this->layout->addContent($this->render('GeneratorConfigure'));
$this->layout->render();
}
protected function displayTopBar() {
$topBar = new BlockTopBarMain($this);
$buttonSave = new BlockButtonSave($this);
$buttonSave->addClass('n2_button--inactive');
$buttonSave->addClass('n2_generator_configuration_save');
$topBar->addPrimaryBlock($buttonSave);
$this->layout->setTopBar($topBar->toHTML());
}
protected function displayHeader() {
$this->blockHeader = new BlockHeader($this);
$this->blockHeader->setHeading(n2_('Generators'));
foreach (GeneratorFactory::getGenerators() AS $generatorGroup) {
if ($generatorGroup->hasConfiguration()) {
$button = new MenuItem($generatorGroup->getLabel());
$button->setActive($this->generatorGroup ===
$generatorGroup);
$button->setUrl($this->getUrlSettingsGenerator($generatorGroup->getName()));
$this->blockHeader->addMenuItem($button);
}
}
$this->layout->addContentBlock($this->blockHeader);
}
/**
* @return AbstractGeneratorGroup
*/
public function getGeneratorGroup() {
return $this->generatorGroup;
}
/**
* @param AbstractGeneratorGroup $generatorGroup
*/
public function setGeneratorGroup($generatorGroup) {
$this->generatorGroup = $generatorGroup;
}
/**
* @return mixed
*/
public function getConfiguration() {
return $this->configuration;
}
/**
* @param mixed $configuration
*/
public function setConfiguration($configuration) {
$this->configuration = $configuration;
}
public function renderForm() {
$this->configuration->render($this);
}
}PK9e�[9sɳ5Application/Admin/Settings/ViewSettingsClearCache.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Settings;
use Nextend\Framework\Cache\CacheImage;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\Message\Notice;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Token;
use Nextend\Framework\Form\Form;
use Nextend\Framework\View\AbstractView;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\TopBarMain\BlockTopBarMain;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButton;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButtonBack;
use Nextend\SmartSlider3\Application\Admin\Layout\LayoutDefault;
use Nextend\SmartSlider3\Application\Admin\TraitAdminUrl;
class ViewSettingsClearCache extends AbstractView {
use TraitAdminUrl;
/**
* @var LayoutDefault
*/
protected $layout;
public function display() {
$this->layout = new LayoutDefault($this);
$this->layout->addBreadcrumb(n2_('Settings'),
'ssi_16 ssi_16--cog', $this->getUrlSettingsDefault());
$this->layout->addBreadcrumb(n2_('Clear cache'),
'', $this->getUrlSettingsClearCache());
$this->displayTopBar();
$this->displayHeader();
$this->layout->render();
}
protected function displayTopBar() {
$topBar = new BlockTopBarMain($this);
$buttonClearCache = new BlockButton($this);
$buttonClearCache->addClass('n2_slider_clear_cache');
$buttonClearCache->setLabel(n2_('Clear cache'));
$buttonClearCache->setBig();
$buttonClearCache->setGreen();
$topBar->addPrimaryBlock($buttonClearCache);
$buttonBack = new BlockButtonBack($this);
$buttonBack->setUrl($this->getUrlSettingsDefault());
$topBar->addPrimaryBlock($buttonBack);
$this->layout->setTopBar($topBar->toHTML());
}
protected function displayHeader() {
$this->layout->addContent($this->render('ClearCache'));
}
public function renderForm() {
$form = new Form($this, 'clear_cache');
new Token($form->getFieldsetHidden());
$settings = new ContainerTable($form->getContainer(),
'clear-cache-options', n2_('Clear cache options'));
$row1 = $settings->createRow('clear-cache');
new OnOff($row1, 'delete-image-cache', n2_('Delete
resized image cache'), 0);
$instructions = sprintf(n2_('If enabled the following folder
will be <b>permanently deleted</b>: %s'),
CacheImage::getStorage()
->getPath('slider/cache', '', 'image'));
new Notice($row1, 'instructions',
n2_('Instruction'), $instructions);
$form->render();
}
}PK9e�[�Q�,
,
0Application/Admin/Settings/ViewSettingsFonts.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Settings;
use Nextend\Framework\Font\FontSettings;
use Nextend\Framework\Font\FontSources;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\Message\Notice;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Element\Textarea;
use Nextend\Framework\Form\Element\Token;
use Nextend\Framework\Form\Form;
class ViewSettingsFonts extends AbstractViewSettings {
protected $active = 'fonts';
public function display() {
parent::display();
$this->layout->addBreadcrumb(n2_('Fonts'),
'');
$this->layout->addContent($this->render('Fonts'));
$this->layout->render();
}
public function renderForm() {
$form = new Form($this, 'fonts');
new Token($form->getFieldsetHidden());
$form->loadArray(FontSettings::getData()
->toArray());
$form->loadArray(FontSettings::getPluginsData()
->toArray());
$table = new ContainerTable($form->getContainer(),
'fonts', n2_('Configuration'));
$row1 = $table->createRow('fonts-1');
$instruction = sprintf(n2_('Here you can configure the default
font your layers have, and the dropdown list of the fonts. Google Fonts are
recognized automatically, but you can use your own custom fonts, too.
%1$sLearn how to do that.%2$s'), '<a
href="https://smartslider.helpscoutdocs.com/article/1828-using-your-own-fonts"
target="_blank">', '</a>');
new Notice($row1, 'instructions',
n2_('Instruction'), $instruction);
$row2 = $table->createRow('fonts-2');
new Text($row2, 'default-family', n2_('Default
family'), '', array(
'tipLabel' => n2_('Default
family'),
'tipDescription' => n2_('This font family is
used for the newly added layers.')
));
$row3 = $table->createRow('fonts-1');
new Textarea($row3, 'preset-families', n2_('Preset
font families'), '', array(
'width' => 200,
'height' => 300,
'tipLabel' => n2_('Preset font
families'),
'tipDescription' => n2_('These font families
appear in the dropdown list.')
));
$fountSources = FontSources::getFontSources();
foreach ($fountSources AS $fountSource) {
$table = new ContainerTable($form->getContainer(),
$fountSource->getName(), $fountSource->getLabel());
$fountSource->renderFields($table);
}
$form->render();
}
}PK9e�[H�*�
�
4Application/Admin/Settings/ViewSettingsFramework.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Settings;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Element\Token;
use Nextend\Framework\Form\Form;
use Nextend\Framework\Settings;
class ViewSettingsFramework extends AbstractViewSettings {
protected $active = 'framework';
public function display() {
parent::display();
$this->layout->addBreadcrumb(n2_('Framework'),
'');
$this->layout->addContent($this->render('Framework'));
$this->layout->render();
}
public function renderForm() {
$values = Settings::getAll();
$form = new Form($this, 'global');
$form->loadArray($values);
$table = new ContainerTable($form->getContainer(),
'framework', n2_('Framework'));
$row1 = $table->createRow('framework-1');
new Token($row1);
new OnOff($row1, 'protocol-relative', n2_('Use
protocol-relative URL'), 1, array(
'tipLabel' => n2_('Use
protocol-relative URL'),
'tipDescription' => n2_('Loads the URLs
without a http or https protocol.')
));
new OnOff($row1, 'header-preload', n2_('Header
preload'), 0, array(
'tipLabel' => n2_('Header
preload'),
'tipDescription' => n2_('If the slider is an
important part of your site, tell the browser to preload its files.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1785-framework#header-preload'
));
new OnOff($row1, 'force-english-backend',
n2_('English UI'), 0, array(
'tipLabel' => n2_('English UI'),
'tipDescription' => n2_('You can keep using
Smart Slider 3 in English, even if your backend isn\'t in
English.')
));
new OnOff($row1, 'frontend-accessibility',
n2_('Improved frontend accessibility'), 1, array(
'tipLabel' => n2_('Improved frontend
accessibility'),
'tipDescription' => n2_('Keeps the clicked
element (like a button) in focus unless the focus is changed by clicking
away.')
));
$table = new ContainerTable($form->getContainer(),
'javascript', 'JavaScript');
$row1 = $table->createRow('javascript-1');
new Text($row1, 'scriptattributes', n2_('Script
attributes'), '');
new Select($row1, 'javascript-inline',
n2_('Slider\'s inline JavaScript'), 'head', array(
'options' => array(
'head' => n2_('Head'),
'body' => n2_('Into the slider')
)
));
$table = new ContainerTable($form->getContainer(),
'css', 'CSS');
$row1 = $table->createRow('css-1');
new OnOff($row1, 'async-non-primary-css', n2_('Async
non-primary CSS '), 0, array(
'tipLabel' => n2_('Async non-primary
CSS'),
'tipDescription' => n2_('Google Fonts, icon
and lightbox CSS are loaded in a non-blocking way. Disable if you see
missing icons, fonts or styles.')
));
new OnOff($row1, 'icon-fa', n2_('Load Font Awesome
4'), 1);
$table = new ContainerTable($form->getContainer(),
'requests', n2_('API requests'));
$row1 = $table->createRow('requests-1');
new OnOff($row1, 'curl', sprintf(n2_x('Use %s',
'Curl'), 'Curl'), 1);
new OnOff($row1, 'curl-clean-proxy',
sprintf(n2_x('Clean %s', 'curl proxy'), 'curl
proxy'), 0);
$form->render();
}
}PK9e�[��N
'
'2Application/Admin/Settings/ViewSettingsGeneral.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Settings;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\Breakpoint;
use Nextend\Framework\Form\Element\Hidden;
use Nextend\Framework\Form\Element\Message\Notice;
use Nextend\Framework\Form\Element\MixedField;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Element\Text\Number;
use Nextend\Framework\Form\Element\Text\TextAutoComplete;
use Nextend\Framework\Form\Element\Textarea;
use Nextend\Framework\Form\Element\Token;
use Nextend\Framework\Form\Form;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButton;
use Nextend\SmartSlider3\Application\Admin\TraitAdminUrl;
use Nextend\SmartSlider3\Platform\Joomla\JoomlaShim;
use Nextend\SmartSlider3\Settings;
class ViewSettingsGeneral extends AbstractViewSettings {
use TraitAdminUrl;
protected $active = 'general';
const defaults = array(
'desktop-large-portrait' => 1440,
'desktop-large-landscape' => 1440,
'tablet-large-portrait' => 1300,
'tablet-large-landscape' => 1300,
'tablet-portrait' => 1199,
'tablet-landscape' => 1199,
'mobile-large-portrait' => 900,
'mobile-large-landscape' => 1050,
'mobile-portrait' => 700,
'mobile-landscape' => 900,
);
public function display() {
parent::display();
$this->layout->addContent($this->render('General'));
$this->layout->render();
}
protected function addHeaderActions() {
$buttonClearCache = new BlockButton($this);
$buttonClearCache->setBig();
$buttonClearCache->setLabel(n2_('Clear cache'));
$buttonClearCache->setUrl($this->getUrlSettingsClearCache());
$this->blockHeader->addAction($buttonClearCache->toHTML());
}
public function renderForm() {
$data = Settings::getAll();
$form = new Form($this, 'settings');
$form->loadArray($data);
$table = new ContainerTable($form->getContainer(),
'general', n2_('General settings'));
$row1 = $table->createRow('general-1');
new Token($row1);
new Hidden($row1, 'slidersOrder2', '');
new Hidden($row1, 'slidersOrder2Direction',
'');
new OnOff($row1, 'autoupdatecheck', n2_('Automatic
update check'), 1);
new OnOff($row1, 'slide-as-file', n2_('Alternative
save slide'), 0, array(
'tipLabel' => n2_('Alternative save
slide'),
'tipDescription' => n2_('If you experience
problems during the save this option might solve them.')
));
new OnOff($row1, 'preview-new-window', n2_('Preview
in new window'), 0);
$row3 = $table->createRow('general-3');
new OnOff($row3, 'lightbox-mobile-new-tab',
n2_('Lightbox videos in new tab on Mobile'), 1, array(
'tipLabel' => n2_('Lightbox videos in
new tab on Mobile'),
'tipDescription' => n2_('Opens the lightbox
videos in the YouTube app to avoid the mobile disabling the video.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1783-general#lightbox-videos-in-new-tab-on-mobile'
));
new OnOff($row3, 'youtube-privacy-enhanced',
n2_('YouTube and Vimeo privacy enhanced mode'), 0);
new Number($row3, 'smooth-scroll-speed', n2_('Smooth
scroll speed'), 400, array(
'wide' => 5,
'unit' => 'ms'
));
$row4 = $table->createRow('general-4');
new Textarea($row4, 'external-css-files',
n2_('Editor - additional CSS files'), '', array(
'width' => 300,
'tipLabel' => n2_('Editor - additional
CSS files'),
'tipDescription' => n2_('You can call your
own CSS files to our backend, for example, to be able to use custom fonts.
Write each URL to a new line.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1783-general#editor-additional-css-files'
));
$table = new ContainerTable($form->getContainer(),
'joomla', n2_('Joomla settings'));
$rowJoomla = $table->createRow('joomla-row');
new OnOff($rowJoomla, 'force-rtl-backend',
n2_('Force RTL backend'), 0);
new OnOff($rowJoomla, 'joomla-plugins-content-enabled',
n2_('Run content plugins on sliders'), 1, array(
'relatedFieldsOn' => array(
'settingsjoomla-plugins-content-excluded'
)
));
new Select($rowJoomla, 'joomla-plugins-content-excluded',
n2_('Exclude plugins'), '', array(
'isMultiple' => true,
'options' =>
JoomlaShim::getOnContentPreparePluginsList()
));
$table = new ContainerTable($form->getContainer(),
'breakpoints-table', n2_('Breakpoints'));
$instructionRow =
$table->createRow('breakpoints-row-instruction');
$instructions = n2_('Breakpoints define the browser width in
pixel when the slider switches to a different device.') . '
' . n2_('At each slider you can override the global breakpoints
with local values.');
new Notice($instructionRow, 'breakpoints-instructions',
n2_('Instruction'), $instructions);
new Text\HiddenText($table->getFieldsetLabel(),
'responsive-screen-width-desktop-portrait', false,
self::defaults['desktop-large-portrait']);
new Text\HiddenText($table->getFieldsetLabel(),
'responsive-screen-width-desktop-portrait-landscape', false,
self::defaults['desktop-large-landscape']);
new Text\HiddenText($table->getFieldsetLabel(),
'responsive-screen-width-tablet-landscape', false,
self::defaults['tablet-large-portrait']);
new Text\HiddenText($table->getFieldsetLabel(),
'responsive-screen-width-tablet-landscape-landscape', false,
self::defaults['tablet-large-landscape']);
new Text\HiddenText($table->getFieldsetLabel(),
'responsive-screen-width-tablet-portrait', false,
self::defaults['tablet-portrait']);
new Text\HiddenText($table->getFieldsetLabel(),
'responsive-screen-width-tablet-portrait-landscape', false,
self::defaults['tablet-landscape']);
new Text\HiddenText($table->getFieldsetLabel(),
'responsive-screen-width-mobile-landscape', false,
self::defaults['mobile-large-portrait']);
new Text\HiddenText($table->getFieldsetLabel(),
'responsive-screen-width-mobile-landscape-landscape', false,
self::defaults['mobile-large-landscape']);
new Text\HiddenText($table->getFieldsetLabel(),
'responsive-screen-width-mobile-portrait', false,
self::defaults['mobile-portrait']);
new Text\HiddenText($table->getFieldsetLabel(),
'responsive-screen-width-mobile-portrait-landscape', false,
self::defaults['mobile-landscape']);
$rowBreakpoints =
$table->createRow('breakpoints-row-1');
new Breakpoint($rowBreakpoints, 'breakpoints', array(
'desktoplandscape-portrait' =>
'settingsresponsive-screen-width-desktop-portrait',
'desktoplandscape-landscape' =>
'settingsresponsive-screen-width-desktop-portrait-landscape',
'tabletlandscape-portrait' =>
'settingsresponsive-screen-width-tablet-landscape',
'tabletlandscape-landscape' =>
'settingsresponsive-screen-width-tablet-landscape-landscape',
'tabletportrait-portrait' =>
'settingsresponsive-screen-width-tablet-portrait',
'tabletportrait-landscape' =>
'settingsresponsive-screen-width-tablet-portrait-landscape',
'mobilelandscape-portrait' =>
'settingsresponsive-screen-width-mobile-landscape',
'mobilelandscape-landscape' =>
'settingsresponsive-screen-width-mobile-landscape-landscape',
'mobileportrait-portrait' =>
'settingsresponsive-screen-width-mobile-portrait',
'mobileportrait-landscape' =>
'settingsresponsive-screen-width-mobile-portrait-landscape'
));
$table = new ContainerTable($form->getContainer(),
'focus-offset', n2_('Focus offset'));
$row1 = $table->createRow('focus-offset-1');
new Notice($row1, 'focus-instructions',
n2_('Instruction'), n2_('This option is used at the full
page layout to decrease the slider height. The "Scroll to slider"
option also uses this option to determine where to scroll the
slider.'));
$row2 = $table->createRow('focus-offset-2');
$row2HeightOffsetValue = '';
new TextAutoComplete($row2, 'responsive-focus-top',
n2_('Top'), $row2HeightOffsetValue, array(
'style' => 'width:200px;',
'values' => array($row2HeightOffsetValue)
));
new Text($row2, 'responsive-focus-bottom',
n2_('Bottom'), '', array(
'style' => 'width:200px;'
));
$table = new ContainerTable($form->getContainer(),
'translate-url', n2_('Translate url'));
$row1 = $table->createRow('translate-url-1');
new Notice($row1, 'translate-url-instruction',
n2_('Instruction'), n2_('You can change the frontend URL our
assets are loading from. It can be useful after moving to a new
domain.'));
$row2 = $table->createRow('translate-url-2');
$translateUrl = new MixedField($row2, 'translate-url',
false, '|*|');
new Text($translateUrl, 'translate-url-1',
n2_('From'), '', array(
'style' => 'width:200px;',
'tipLabel' => n2_('From'),
'tipDescription' => n2_('The old URL you want
to replace. E.g. https://oldsite.com/')
));
new Text($translateUrl, 'translate-url-2',
n2_('To'), '', array(
'style' => 'width:200px;',
'tipLabel' => n2_('To'),
'tipDescription' => n2_('The new URL you want
to use. E.g. https://newsite.com')
));
echo $form->render();
echo '<input name="namespace"
value="default" type="hidden">';
}
}PK9e�[@�~DD7Application/Admin/Settings/ViewSettingsItemDefaults.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Settings;
use Nextend\Framework\Form\Element\Token;
use Nextend\Framework\Form\Form;
use Nextend\SmartSlider3\Renderable\Item\ItemFactory;
class ViewSettingsItemDefaults extends AbstractViewSettings {
protected $active = 'itemDefaults';
public function display() {
parent::display();
$this->layout->addBreadcrumb(n2_('Layer defaults'),
'');
$this->layout->addContent($this->render('ItemDefaults'));
$this->layout->render();
}
public function renderForm() {
$form = new Form($this, 'defaults');
new Token($form->getFieldsetHidden());
foreach (ItemFactory::getItems() as $item) {
$item->globalDefaultItemFontAndStyle($form->getContainer());
}
$form->render();
}
}PK9e�[�b'+�/�/1Application/Admin/Slider/ControllerAjaxSlider.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Slider;
use Nextend\Framework\Asset\AssetManager;
use Nextend\Framework\Controller\Admin\AdminAjaxController;
use Nextend\Framework\Form\Form;
use Nextend\Framework\Misc\Base64;
use Nextend\Framework\Notification\Notification;
use Nextend\Framework\PageFlow;
use Nextend\Framework\Request\Request;
use Nextend\SmartSlider3\Application\Admin\TraitAdminUrl;
use Nextend\SmartSlider3\Application\Model\ModelLicense;
use Nextend\SmartSlider3\Application\Model\ModelSliders;
use Nextend\SmartSlider3\BackupSlider\ImportSlider;
use Nextend\SmartSlider3\Slider\ResponsiveType\ResponsiveTypeFactory;
use Nextend\SmartSlider3\Slider\SliderType\SliderTypeFactory;
use Nextend\SmartSlider3\SmartSlider3Info;
use Nextend\SmartSlider3\Widget\WidgetGroupFactory;
class ControllerAjaxSlider extends AdminAjaxController {
use TraitAdminUrl;
public function actionRestore() {
$this->validateToken();
$this->validatePermission('smartslider_edit');
$sliderID = Request::$REQUEST->getVar('slider');
$this->validateVariable(!empty($sliderID), 'slider');
$slidersModel = new ModelSliders($this);
$slidersModel->restore($sliderID);
Notification::success(n2_('Slider restored.'));
$this->response->respond();
}
public function actionDeletePermanently() {
$this->validateToken();
$this->validatePermission('smartslider_edit');
$sliderID = Request::$REQUEST->getVar('slider');
$this->validateVariable(!empty($sliderID), 'slider');
$slidersModel = new ModelSliders($this);
$deletedSliderIDs = $slidersModel->deletePermanently($sliderID);
Notification::success(n2_('Slider permanently
deleted.'));
$this->response->respond(array(
'sliderIDs' => $deletedSliderIDs
));
}
public function actionCreate() {
$this->validateToken();
$this->validatePermission('smartslider_edit');
$slidersModel = new ModelSliders($this);
$projectName =
Request::$REQUEST->getVar('projectName');
$this->validateVariable(!empty($projectName),
'projectName');
$slider = array(
'title' => $projectName,
'width' =>
max(Request::$REQUEST->getInt('sliderWidth', 1200), 200),
'height' =>
max(Request::$REQUEST->getInt('sliderHeight', 600), 100),
'responsiveLimitSlideWidth' => 1
);
$projectType =
Request::$REQUEST->getVar('projectType', 'slider');
if ($projectType == 'block') {
$slider['type'] = 'block';
} else {
switch (Request::$REQUEST->getVar('sliderType',
'simple')) {
case 'carousel':
$slider['type'] =
'carousel';
$slider['maximum-pane-width'] =
$slider['width'];
$slider['slide-width'] =
max(Request::$REQUEST->getInt('slideWidth', 600), 200);
$slider['slide-height'] =
max(Request::$REQUEST->getInt('slideHeight', 400), 100);
$slider['widget-bullet-enabled'] = 1;
$slider['widgetbullet'] =
'transitionRectangle';
$slider['widget-arrow-enabled'] = 1;
$slider['widgetarrow'] =
'imageEmpty';
break;
case 'showcase':
$slider['type'] =
'showcase';
$slider['slide-width'] =
max(Request::$REQUEST->getInt('slideWidth', 600), 200);
$slider['slide-height'] =
max(Request::$REQUEST->getInt('slideHeight', 400), 100);
$slider['widget-bullet-enabled'] = 1;
$slider['widgetbullet'] =
'transitionRectangle';
break;
case 'simple':
default:
$slider['type'] = 'simple';
$slider['widget-arrow-enabled'] = 1;
$slider['widgetarrow'] =
'imageEmpty';
break;
}
}
switch (Request::$REQUEST->getVar('responsiveMode',
'fullwidth')) {
case 'fullpage':
$slider['responsive-mode'] =
'fullpage';
break;
case 'boxed':
$slider['responsive-mode'] = 'auto';
break;
case 'fullwidth':
default:
$slider['responsive-mode'] =
'fullwidth';
break;
}
$groupID = Request::$REQUEST->getVar('groupID', 0);
$sliderid = $slidersModel->create($slider, $groupID);
Notification::success(n2_('Slider created.'));
$this->response->redirect($this->getUrlSliderEdit($sliderid,
$groupID));
}
public function actionRename() {
$this->validateToken();
$this->validatePermission('smartslider_edit');
$sliderId = Request::$REQUEST->getInt('sliderid');
$this->validateVariable($sliderId > 0, 'Slider');
$title = Request::$REQUEST->getVar('title');
$slidersModel = new ModelSliders($this);
$slidersModel->setTitle($sliderId, $title);
Notification::success(n2_('Slider renamed.'));
$this->response->respond();
}
public function actionEdit() {
$this->validateToken();
$this->validatePermission('smartslider_edit');
$slidersModel = new ModelSliders($this);
$slider =
$slidersModel->get(Request::$REQUEST->getInt('sliderid'));
$this->validateDatabase($slider);
$responseData = $slidersModel->save($slider['id'],
Request::$REQUEST->getVar('slider'));
if ($responseData !== false) {
Notification::success(n2_('Slider saved.'));
$this->response->respond($responseData);
}
}
public function actionImportDemo() {
$this->validateToken();
$this->validatePermission('smartslider_edit');
$key = 'http:' .
Base64::decode(Request::$REQUEST->getVar('key'));
if (strpos($key, 'http://smartslider3.com/') !== 0) {
Notification::error(sprintf(n2_('Import url is not valid:
%s'), $key));
$this->response->error();
}
if (!ModelLicense::getInstance()
->hasKey()) {
Notification::error(n2_('License key required for premium
features!'));
$this->response->error();
}
$posts = array(
'action' => 'asset',
'asset' => $key,
'version' => SmartSlider3Info::$version
);
$result = SmartSlider3Info::api($posts);
if (!is_string($result)) {
$hasError =
SmartSlider3Info::hasApiError($result['status'], array(
'key' => $key
));
if ($hasError == 'dashboard') {
$this->redirect($this->getUrlDashboard());
} else if ($hasError !== false) {
$this->response->error();
}
} else {
$import = new ImportSlider($this);
$groupID = Request::$REQUEST->getVar('groupID',
0);
$sliderId = $import->import($result, $groupID,
'clone', 1, false);
if ($sliderId !== false) {
Notification::success(n2_('Slider imported.'));
$this->response->redirect($this->getUrlSliderEdit($sliderId,
$groupID));
} else {
Notification::error(n2_('Import error!'));
$this->response->error();
}
}
$this->response->respond();
}
public function actionDuplicate() {
$this->validateToken();
$this->validatePermission('smartslider_edit');
$sliderId = Request::$REQUEST->getInt('sliderid');
$this->validateVariable($sliderId > 0, 'Slider');
$slidersModel = new ModelSliders($this);
$newSliderId = $slidersModel->duplicate($sliderId, true);
$slider = $slidersModel->getWithThumbnail($newSliderId);
$this->validateDatabase($slider);
Notification::success(n2_('Slide duplicated.'));
$view = new ViewAjaxSliderBox($this);
$view->setSlider($slider);
$this->response->respond($view->display());
}
public function actionChangeSliderType() {
$this->validateToken();
$sliderID = Request::$GET->getInt('sliderID');
if ($sliderID > 0) {
$targetSliderType =
Request::$POST->getVar('targetSliderType');
$availableTypes = SliderTypeFactory::getAdminTypes();
if (isset($availableTypes[$targetSliderType])) {
$slidersModel = new ModelSliders($this);
$slidersModel->changeSliderType($sliderID,
$targetSliderType);
$this->response->respond();
} else {
Notification::error(sprintf(n2_('%s slider type is not
available.'), ucfirst($targetSliderType)));
$this->response->error();
}
} else {
Notification::error('Slider ID error: ' . $sliderID);
$this->response->error();
}
}
public function actionRenderResponsiveType() {
$this->validateToken();
$responsiveType =
ResponsiveTypeFactory::getType(Request::$POST->getVar('value'))
->createAdmin();
if ($responsiveType) {
$values = Request::$REQUEST->getVar('values',
array());
$form = new Form($this->applicationType,
'slider');
$form->loadArray($values);
PageFlow::cleanOutputBuffers();
ob_start();
$responsiveType->renderFields($form->getContainer());
$form->render();
$scripts = AssetManager::generateAjaxJS();
$html = ob_get_clean();
$this->response->respond(array(
'html' => $html,
'scripts' => $scripts
));
} else {
Notification::error('Responsive type not found: ' .
Request::$POST->getVar('value'));
$this->response->error();
}
}
public function actionRenderWidgetArrow() {
$this->renderWidgetForm('arrow');
}
public function actionRenderWidgetAutoplay() {
$this->renderWidgetForm('autoplay');
}
public function actionRenderWidgetBar() {
$this->renderWidgetForm('bar');
}
public function actionRenderWidgetBullet() {
$this->renderWidgetForm('bullet');
}
public function actionRenderWidgetFullscreen() {
$this->renderWidgetForm('fullscreen');
}
public function actionRenderWidgetHtml() {
$this->renderWidgetForm('html');
}
public function actionRenderWidgetIndicator() {
$this->renderWidgetForm('indicator');
}
public function actionRenderWidgetShadow() {
$this->renderWidgetForm('shadow');
}
public function actionRenderWidgetThumbnail() {
$this->renderWidgetForm('thumbnail');
}
private function renderWidgetForm($type) {
$this->validateToken();
$group = WidgetGroupFactory::getGroup($type);
$value = Request::$POST->getVar('value');
$widget = $group->getWidget($value);
if ($widget) {
$values = Request::$REQUEST->getVar('values',
array());
$form = new Form($this->applicationType,
'slider');
$values = array_merge($widget->getDefaults(), $values);
$form->loadArray($values);
PageFlow::cleanOutputBuffers();
ob_start();
$widget->renderFields($form->getContainer());
$form->render();
$scripts = AssetManager::generateAjaxJS();
$html = ob_get_clean();
$this->response->respond(array(
'html' => $html,
'scripts' => $scripts
));
} else {
Notification::error('Not found: ' . $value);
$this->response->error();
}
}
}PK9e�[�\�� �
-Application/Admin/Slider/ControllerSlider.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Slider;
use Nextend\Framework\Data\Data;
use Nextend\Framework\Notification\Notification;
use Nextend\Framework\Parser\Common;
use Nextend\Framework\Request\Request;
use Nextend\SmartSlider3\Application\Admin\AbstractControllerAdmin;
use Nextend\SmartSlider3\Application\Model\ModelSliders;
use Nextend\SmartSlider3\Application\Model\ModelSlides;
use Nextend\SmartSlider3\BackupSlider\ExportSlider;
class ControllerSlider extends AbstractControllerAdmin {
protected $sliderID = 0;
protected $groupID = 0;
public function initialize() {
parent::initialize();
$this->sliderID =
Request::$REQUEST->getInt('sliderid');
$this->groupID =
Request::$REQUEST->getInt('groupID', 0);
}
/**
* @return int
*/
public function getSliderID() {
return $this->sliderID;
}
public function actionClearCache() {
if ($this->validateToken()) {
$slidersModel = new ModelSliders($this);
$slider = $slidersModel->get($this->sliderID);
if ($this->validateDatabase($slider)) {
$slidersModel->refreshCache($this->sliderID);
Notification::success(n2_('Cache cleared.'));
$groupData = $this->getGroupData($this->sliderID);
$this->redirect($this->getUrlSliderEdit($this->sliderID,
$groupData['group_id']));
}
}
}
public function actionEdit() {
if ($this->validatePermission('smartslider_edit')) {
$slidersModel = new ModelSliders($this);
$slider = $slidersModel->get($this->sliderID);
if (!$slider) {
$this->redirectToSliders();
}
if ($slider['type'] == 'group') {
if (N2SSPRO) {
$this->doAction('editGroup', array(
$slider
));
} //N2SSPRO
} else {
$groupData = $this->getGroupData($this->sliderID);
$view = new ViewSliderEdit($this);
$view->setGroupData($groupData['group_id'],
$groupData['title']);
$view->setSlider($slider);
$view->display();
}
}
}
public function actionSimpleEdit() {
if ($this->validatePermission('smartslider_edit')) {
$slidersModel = new ModelSliders($this);
$slider = $slidersModel->get($this->sliderID);
if (!$slider) {
$this->redirectToSliders();
}
$groupData = $this->getGroupData($this->sliderID);
if (Request::$POST->getInt('save') &&
$this->validateToken()) {
$sliderData = new
Data(Request::$POST->getVar('slider'));
if ($sliderData->get('delete-slider') == 1) {
$slidersModel->trash($this->sliderID,
$groupData['group_id']);
$this->redirectToSliders();
} else {
$params = json_decode($slider['params'],
true);
$params['aria-label'] =
$sliderData->get('aria-label', '');
$slidersModel->saveSimple($this->sliderID,
$sliderData->get('title'), $params);
$slidesModel = new ModelSlides($this);
$slides = Request::$POST->getVar('slide');
$ordering = array();
foreach ($slides as $slideID => $slide) {
$slideData = new Data($slide);
if ($slideData->get('delete-slide') ==
1) {
$slidesModel->delete($slideID);
} else {
$ordering[$slideID] =
$slideData->get('ordering');
$slideRow = $slidesModel->get($slideID);
$slideParamsData = new
Data($slideRow['params']);
$linkV1 =
$slideParamsData->get('link', '');
if (!empty($linkV1)) {
list($link, $target) =
array_pad((array)Common::parse($linkV1), 2, '');
$slideParamsData->un_set('link');
$slideParamsData->set('href',
$link);
$slideParamsData->set('href-target', $target);
}
$slideParamsData->set('href',
$slideData->get('href'));
$slideParamsData->set('href-target',
$slideData->get('href-target'));
$slideParamsData->set('thumbnailType',
$slideData->get('thumbnailType'));
$slideParamsData->set('backgroundImage',
$slideData->get('backgroundImage'));
$slidesModel->saveSimple($slideID,
$slideData->get('title'),
$slideData->get('description'),
$slideParamsData->toArray());
}
}
asort($ordering, SORT_NUMERIC);
$slidesModel->order($this->sliderID,
array_keys($ordering));
$this->redirect($this->getUrlSliderSimpleEdit($this->sliderID,
$groupData['group_id']));
}
}
$view = new ViewSliderSimpleEdit($this);
$view->setGroupData($groupData['group_id'],
$groupData['title']);
$view->setSlider($slider);
$view->display();
}
}
public function actionSimpleEditAddSlide() {
if ($this->validatePermission('smartslider_edit')) {
$slidersModel = new ModelSliders($this);
$slider = $slidersModel->get($this->sliderID);
if (!$slider) {
$this->redirectToSliders();
}
$groupData = $this->getGroupData($this->sliderID);
if (Request::$POST->getInt('save') &&
$this->validateToken()) {
$slidesModel = new ModelSlides($this);
$slidesModel->createSimpleEditAdd(Request::$POST->getVar('slide'),
$this->sliderID);
$this->redirect($this->getUrlSliderSimpleEdit($this->sliderID,
$groupData['group_id']));
}
$view = new ViewSliderSimpleEditAddSlide($this);
$view->setGroupData($groupData['group_id'],
$groupData['title']);
$view->setSlider($slider);
$view->display();
}
}
public function actionTrash() {
if ($this->validateToken() &&
$this->validatePermission('smartslider_delete')) {
$slidersModel = new ModelSliders($this);
$mode = $slidersModel->trash($this->sliderID,
$this->groupID);
switch ($mode) {
case 'trash':
Notification::success(n2_('Slider moved to the
trash.'));
break;
case 'unlink':
Notification::success(n2_('Slider removed from the
group.'));
break;
}
if ($this->groupID > 0) {
$this->redirect($this->getUrlSliderEdit($this->groupID));
} else {
$this->redirectToSliders();
}
}
}
public function actionDuplicate() {
if ($this->validateToken() &&
$this->validatePermission('smartslider_edit')) {
$slidersModel = new ModelSliders($this);
if (($sliderid =
Request::$REQUEST->getInt('sliderid')) &&
$slidersModel->get($sliderid)) {
$newSliderId = $slidersModel->duplicate($sliderid);
Notification::success(n2_('Slider duplicated.'));
$groupData = $this->getGroupData($newSliderId);
$this->redirect($this->getUrlSliderEdit($newSliderId,
$groupData['group_id']));
}
$this->redirectToSliders();
}
}
public function actionExport() {
if ($this->validateToken() &&
$this->validatePermission('smartslider_edit')) {
$export = new ExportSlider($this, $this->sliderID);
$export->create();
}
}
public function actionExportHTML() {
if ($this->validateToken() &&
$this->validatePermission('smartslider_edit')) {
$export = new ExportSlider($this, $this->sliderID);
$export->createHTML();
}
}
}PK9e�[l�U??3Application/Admin/Slider/Template/AjaxSliderBox.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Slider;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slider\SliderBox\BlockSliderBox;
/**
* @var $this ViewAjaxSliderBox
*/
$blockSliderBox = new BlockSliderBox($this);
$blockSliderBox->setSlider($this->getSlider());
$blockSliderBox->display();
PK9e�[}�����*Application/Admin/Slider/Template/Edit.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Slider;
use Nextend\Framework\Asset\Js\Js;
use Nextend\SmartSlider3\Settings;
/**
* @var $this ViewSliderEdit
*/
$slider = $this->getSlider();
JS::addInline('new _N2.SliderEdit(' . json_encode(array(
'previewInNewWindow' =>
!!Settings::get('preview-new-window', 0),
'saveAjaxUrl' =>
$this->getAjaxUrlSliderEdit($slider['id']),
'previewUrl' =>
$this->getUrlPreviewSlider($slider['id']),
'ajaxUrl' =>
$this->getAjaxUrlSliderEdit($slider['id']),
'formData' =>
$this->formManager->getData()
)) . ');');
?>
<form id="n2-ss-edit-slider-form" action="#"
method="post">
<?php
$this->renderForm();
?>
</form>PK9e�[��%��0Application/Admin/Slider/Template/SimpleEdit.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Slider;
/**
* @var $this ViewSliderSimpleEdit
*/
use Nextend\Framework\Data\Data;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Select\LinkTarget;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Element\Textarea;
use Nextend\Framework\Form\Element\Token;
use Nextend\Framework\Form\Form;
use Nextend\Framework\Sanitize;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButtonSave;
use Nextend\SmartSlider3\Application\Model\ModelSlides;
use Nextend\SmartSlider3\Slider\SliderParams;
$slider = $this->getSlider();
$sliderParams = new SliderParams($slider['id'],
$slider['type'], $slider['params'], true);
$sliderData = $sliderParams->toArray();
$sliderData['title'] = $slider['title'];
$sliderData['type'] = $slider['type'];
$sliderData['thumbnail'] = $slider['thumbnail'];
$sliderData['alias'] = isset($slider['alias']) ?
$slider['alias'] : '';
?>
<form id="n2_slider_form" action="<?php echo
$this->getUrlSliderSimpleEdit($slider['id'],
$this->groupID); ?>" method="post">
<div id="slider-settings-region" role="region"
tabindex="0" aria-label="<?php echo n2_('Slider
settings') . ': ' .
Sanitize::esc_attr($slider['title']); ?>">
<?php
$form = new Form($this, 'slider');
new Token($form->getFieldsetHidden());
$form->loadArray($sliderData);
$table = new ContainerTable($form->getContainer(),
'general', n2_('Slider settings'));
$row1 = $table->createRow('general-1');
new OnOff($row1, 'delete-slider', n2_('Delete
slider'), 0);
new Text($row1, 'title', n2_('Name'),
n2_('Slider'), array(
'style' => 'width:300px;'
));
new Text($row1, 'aria-label', n2_('ARIA
label'), n2_('Slider'), array(
'style' => 'width:200px;',
'tipLabel' => n2_('ARIA label'),
'tipDescription' => n2_('It allows you to
label your slider for screen readers.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1722-slider-settings-general#aria-label'
));
$form->render();
?>
</div>
<?php
$modelSlides = new ModelSlides($this);
$slides = $modelSlides->getAll($slider['id']);
foreach ($slides as $slide) {
$slideParams = new Data($slide['params']);
$slideData = $slideParams->toArray();
$slideData['ordering'] = $slide['ordering'];
$slideData['title'] = $slide['title'];
$slideData['description'] =
$slide['description'];
?>
<div role="region" tabindex="0"
aria-label="<?php echo Sanitize::esc_attr(n2_('Edit
slide') . ': ' . $slide['title']); ?>">
<?php
$form = new Form($this, 'slide[' .
$slide['id'] . ']');
$form->loadArray($slideData);
$table = new ContainerTable($form->getContainer(),
'general', n2_('Slide') . ': ' .
$slideData['title']);
$row1 = $table->createRow('general-1');
new OnOff($row1, 'delete-slide', n2_('Delete
slide'), 0);
new Text\Number($row1, 'ordering',
n2_('Ordering'), 0, array(
'wide' => 4
));
new Text($row1, 'title', n2_('Slide
title'), '', array(
'style' => 'width:300px;'
));
new Textarea($row1, 'description',
n2_('Description'), '', array(
'width' => 314
));
new Text\FieldImage($row1, 'backgroundImage',
n2_('Slide background'), '', array(
'width' => 300
));
new Select($row1, 'thumbnailType',
n2_('Thumbnail type'), 'default', array(
'options' => array(
'default' => n2_('Default'),
'videoDark' => n2_('Video')
)
));
new Text($row1, 'href', n2_('Link'),
'');
new LinkTarget($row1, 'href-target', n2_('Target
window'));
$form->render();
?>
</div>
<?php
}
?>
<div style="margin: 20px;">
<?php
$buttonSave = new BlockButtonSave($this);
$buttonSave->addClass('n2_slider_save');
$buttonSave->display();
?>
</div>
<input type="hidden" name="save"
value="1">
</form>
<script>
_N2.r(['$', 'windowLoad'], function () {
var $ = _N2.$;
var $form = $('#n2_slider_form');
$('#slider-settings-region').trigger("focus");
$('.n2_slider_save').on('click', function (e) {
e.preventDefault();
$form.trigger("submit");
});
document.addEventListener('keydown', function (e) {
if (e.ctrlKey || e.metaKey) {
if (e.code === 'KeyS') { // ctrl + s
e.preventDefault();
$form.trigger("submit");
}
}
}, {
capture: true
});
});
</script>
<style>
:FOCUS {
box-shadow: 0 0 3px 1px #1d81f9 !important;
}
</style>
PK9e�[�T��8Application/Admin/Slider/Template/SimpleEditAddSlide.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Slider;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Select\LinkTarget;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Element\Textarea;
use Nextend\Framework\Form\Element\Token;
use Nextend\Framework\Form\Form;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButtonSave;
/**
* @var $this ViewSliderSimpleEditAddSlide
*/
$slider = $this->getSlider();
?>
<form id="n2_slider_add_slide_form" action="<?php echo
$this->getUrlSliderSimpleEditAddSlide($slider['id'],
$this->groupID); ?>" method="post">
<div id="slider-add-slide-region" role="region"
tabindex="0" aria-label="<?php echo n2_('Add
slide'); ?>">
<?php
$form = new Form($this, 'slide');
new Token($form->getFieldsetHidden());
$table = new ContainerTable($form->getContainer(),
'general', n2_('Add slide'));
$row1 = $table->createRow('general-1');
new Text($row1, 'title', n2_('Slide title'),
'', array(
'style' => 'width:300px;'
));
new Textarea($row1, 'description',
n2_('Description'), '', array(
'width' => 314
));
new Text\FieldImage($row1, 'backgroundImage',
n2_('Slide background'), '', array(
'width' => 300
));
new Text($row1, 'video', n2_('Video url'),
'', array(
'style' => 'width:300px;'
));
new Select($row1, 'thumbnailType', n2_('Thumbnail
type'), 'default', array(
'options' => array(
'default' => n2_('Default'),
'videoDark' => n2_('Video')
)
));
new Text($row1, 'href', n2_('Link'),
'');
new LinkTarget($row1, 'href-target', n2_('Target
window'));
$form->render();
?>
</div>
<div style="margin: 20px;">
<?php
$buttonSave = new BlockButtonSave($this);
$buttonSave->setLabel(n2_('Add slide'));
$buttonSave->addClass('n2_slider_add_slide');
$buttonSave->display();
?>
</div>
<input type="hidden" name="save"
value="1">
</form>
<script>
_N2.r(['$', 'windowLoad'], function () {
var $ = _N2.$;
var $form = $('#n2_slider_add_slide_form');
$('#slider-add-slide-region').trigger("focus");
$('.n2_slider_add_slide').on('click', function
(e) {
e.preventDefault();
$form.trigger("submit");
});
document.addEventListener('keydown', function (e) {
if (e.ctrlKey || e.metaKey) {
if (e.code === 'KeyS') { // ctrl + s
e.preventDefault();
$form.trigger("submit");
}
}
}, {
capture: true
});
});
</script>
<style>
:FOCUS {
box-shadow: 0 0 3px 1px #1d81f9 !important;
}
</style>
PK9e�[Re#�.Application/Admin/Slider/ViewAjaxSliderBox.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Slider;
use Nextend\Framework\View\AbstractViewAjax;
class ViewAjaxSliderBox extends AbstractViewAjax {
/** @var array */
protected $slider;
public function display() {
return $this->render('AjaxSliderBox');
}
/**
* @return array
*/
public function getSlider() {
return $this->slider;
}
/**
* @param array $slider
*/
public function setSlider($slider) {
$this->slider = $slider;
}
}PK9e�[%�$�$$+Application/Admin/Slider/ViewSliderEdit.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Slider;
use Nextend\Framework\Acl\Acl;
use Nextend\Framework\Localization\Localization;
use Nextend\Framework\Sanitize;
use Nextend\Framework\View\AbstractView;
use Nextend\SmartSlider3\Application\Admin\FormManager\FormManagerSlider;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\Banner\BlockBannerActivate;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\Header\BlockHeader;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\TopBarMain\BlockTopBarMain;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButton;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButtonBack;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButtonPlainIcon;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButtonSave;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\FloatingMenu\BlockFloatingMenu;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\FloatingMenu\BlockFloatingMenuItem;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slide\SlideManager\BlockSlideManager;
use Nextend\SmartSlider3\Application\Admin\Layout\LayoutDefault;
use Nextend\SmartSlider3\Application\Admin\TraitAdminUrl;
use Nextend\SmartSlider3\Application\Model\ModelLicense;
class ViewSliderEdit extends AbstractView {
use TraitAdminUrl;
protected $groupID = 0;
protected $groupTitle = '';
protected $slider;
/**
* @var BlockHeader
*/
protected $blockHeader;
/**
* @var FormManagerSlider
*/
protected $formManager;
/**
* @param int $groupID
* @param string $groupTitle
*/
public function setGroupData($groupID, $groupTitle) {
$this->groupID = $groupID;
$this->groupTitle = $groupTitle;
}
/**
* @param mixed $slider
*/
public function setSlider($slider) {
$this->slider = $slider;
}
public function display() {
$this->formManager = new FormManagerSlider($this,
$this->slider);
$this->layout = new LayoutDefault($this);
if ($this->groupID) {
$this->layout->addBreadcrumb(Sanitize::esc_html($this->groupTitle),
'ssi_16 ssi_16--folderclosed',
$this->getUrlSliderEdit($this->groupID));
}
$this->layout->addBreadcrumb(Sanitize::esc_html($this->slider['title']),
'ssi_16 ssi_16--image',
$this->getUrlSliderEdit($this->slider['id'],
$this->groupID));
$slideManager = new BlockSlideManager($this);
$slideManager->setGroupID($this->groupID);
$slideManager->setSliderID($this->slider['id']);
$subNavigationHTML = '';
$model = ModelLicense::getInstance();
if (!$model->hasKey()) {
$banner = new BlockBannerActivate($this);
$subNavigationHTML .= $banner->toHTML();
}
$subNavigationHTML .= $slideManager->toHTML();
$this->layout->setSubNavigation($subNavigationHTML);
$topBar = new BlockTopBarMain($this);
$buttonSave = new BlockButtonSave($this);
$buttonSave->addClass('n2_slider_settings_save');
$buttonSave->addClass('n2_button--inactive');
$topBar->addPrimaryBlock($buttonSave);
$buttonBack = new BlockButtonBack($this);
if ($this->groupID != 0) {
$buttonBack->setUrl($this->getUrlSliderEdit($this->groupID));
} else {
$buttonBack->setUrl($this->getUrlDashboard());
}
$buttonBack->addClass('n2_slider_settings_back');
$topBar->addPrimaryBlock($buttonBack);
$buttonPreview = new BlockButtonPlainIcon($this);
$buttonPreview->addClass('n2_top_bar_button_icon');
$buttonPreview->addClass('n2_top_bar_main__preview');
$buttonPreview->setIcon('ssi_24 ssi_24--preview');
$buttonPreview->addAttribute('data-n2tip',
n2_('Preview'));
$buttonPreview->setUrl($this->getUrlPreviewIndex($this->slider['id']));
$topBar->addPrimaryBlock($buttonPreview);
$this->layout->setTopBar($topBar->toHTML());
$this->displayHeader();
$this->layout->addContent($this->render('Edit'));
$this->layout->render();
}
protected function displayHeader() {
$this->blockHeader = new BlockHeader($this);
$this->blockHeader->setHeading($this->slider['title']);
$this->blockHeader->setHeadingAfter('ID: ' .
$this->slider['id']);
$this->formManager->addTabsToHeader($this->blockHeader);
$this->addHeaderActions();
$this->layout->addContentBlock($this->blockHeader);
}
public function getSlider() {
return $this->slider;
}
private function addHeaderActions() {
$accessEdit = Acl::canDo('smartslider_edit', $this);
$accessDelete = Acl::canDo('smartslider_delete', $this);
if ($accessEdit || $accessDelete) {
$sliderid = $this->slider['id'];
$actionsMenu = new BlockFloatingMenu($this);
$actions = new BlockButton($this);
$actions->setBig();
$actions->setLabel(n2_('Actions'));
$actions->setIcon('ssi_16 ssi_16--buttonarrow');
$actionsMenu->setButton($actions);
if ($accessEdit) {
$item = new BlockFloatingMenuItem($this);
$item->setLabel(n2_('Change slider type'));
$item->setIcon('ssi_16 ssi_16--arrowright');
$item->addClass('n2_slider_action__change_slider_type');
$actionsMenu->addMenuItem($item);
$item = new BlockFloatingMenuItem($this);
$item->setLabel(n2_('Clear cache'));
$item->setIcon('ssi_16 ssi_16--reset');
$item->setUrl($this->getUrlSliderClearCache($sliderid));
$actionsMenu->addMenuItem($item);
$item = new BlockFloatingMenuItem($this);
$item->setLabel(sprintf(n2_('Export %1$s as
HTML'), n2_('Slider')));
$item->setIcon('ssi_16 ssi_16--download');
$item->setUrl($this->getUrlSliderExportHtml($sliderid));
$actionsMenu->addMenuItem($item);
$item = new BlockFloatingMenuItem($this);
$item->setLabel(n2_('Export'));
$item->setIcon('ssi_16 ssi_16--download');
$item->setUrl($this->getUrlSliderExport($sliderid));
$actionsMenu->addMenuItem($item);
$item = new BlockFloatingMenuItem($this);
$item->setLabel(n2_('Duplicate slider'));
$item->setIcon('ssi_16 ssi_16--duplicate');
$item->setUrl($this->getUrlSliderDuplicate($sliderid,
$this->groupID));
$actionsMenu->addMenuItem($item);
}
if ($accessDelete) {
$item = new BlockFloatingMenuItem($this);
$item->setRed();
$item->setLabel(n2_('Move to trash'));
$item->setIcon('ssi_16 ssi_16--delete');
$item->setUrl($this->getUrlSliderMoveToTrash($sliderid,
$this->groupID));
$actionsMenu->addMenuItem($item);
}
$this->blockHeader->addAction($actionsMenu->toHTML());
}
}
public function renderForm() {
$this->formManager->render();
}
}PK9e�[R3��1Application/Admin/Slider/ViewSliderSimpleEdit.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Slider;
use Nextend\Framework\Sanitize;
use Nextend\Framework\View\AbstractView;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\Header\BlockHeader;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\TopBarMain\BlockTopBarMain;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButton;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButtonBack;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButtonSave;
use Nextend\SmartSlider3\Application\Admin\Layout\LayoutDefault;
use Nextend\SmartSlider3\Application\Admin\TraitAdminUrl;
class ViewSliderSimpleEdit extends AbstractView {
use TraitAdminUrl;
protected $groupID = 0;
protected $groupTitle = '';
/**
* @var array
*/
protected $slider;
/**
* @param int $groupID
* @param string $groupTitle
*/
public function setGroupData($groupID, $groupTitle) {
$this->groupID = $groupID;
$this->groupTitle = $groupTitle;
}
/**
* @param array $slider
*/
public function setSlider($slider) {
$this->slider = $slider;
}
/**
* @return array
*/
public function getSlider() {
return $this->slider;
}
public function display() {
$this->layout = new LayoutDefault($this);
if ($this->groupID) {
$this->layout->addBreadcrumb(Sanitize::esc_html($this->groupTitle),
'ssi_16 ssi_16--folderclosed',
$this->getUrlSliderEdit($this->groupID));
}
$this->layout->addBreadcrumb(Sanitize::esc_html($this->slider['title']),
'ssi_16 ssi_16--image',
$this->getUrlSliderEdit($this->slider['id'],
$this->groupID));
$this->layout->addBreadcrumb(n2_('Simple edit'),
'ssi_16 ssi_16--cog',
$this->getUrlSliderSimpleEdit($this->slider['id'],
$this->groupID));
$topBar = new BlockTopBarMain($this);
$buttonSave = new BlockButtonSave($this);
$buttonSave->addClass('n2_slider_save');
$topBar->addPrimaryBlock($buttonSave);
$buttonBack = new BlockButtonBack($this);
if ($this->groupID != 0) {
$buttonBack->setUrl($this->getUrlSliderEdit($this->groupID));
} else {
$buttonBack->setUrl($this->getUrlDashboard());
}
$buttonBack->addClass('n2_slider_settings_back');
$topBar->addPrimaryBlock($buttonBack);
$this->layout->setTopBar($topBar->toHTML());
$this->displayHeader();
$this->layout->addContent($this->render('SimpleEdit'));
$this->layout->render();
}
protected function displayHeader() {
$blockHeader = new BlockHeader($this);
$blockHeader->setHeading($this->slider['title']);
$blockHeader->setHeadingAfter('ID: ' .
$this->slider['id']);
$addSlide = new BlockButton($this);
$addSlide->setGreen();
$addSlide->setBig();
$addSlide->setLabel(n2_('Add slide'));
$addSlide->setUrl($this->getUrlSliderSimpleEditAddSlide($this->slider['id'],
$this->groupID));
$blockHeader->addAction($addSlide->toHTML());
$this->layout->addContentBlock($blockHeader);
}
}PK9e�[O��X X 9Application/Admin/Slider/ViewSliderSimpleEditAddSlide.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Slider;
use Nextend\Framework\Sanitize;
use Nextend\Framework\View\AbstractView;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\TopBarMain\BlockTopBarMain;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButtonBack;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButtonSave;
use Nextend\SmartSlider3\Application\Admin\Layout\LayoutDefault;
use Nextend\SmartSlider3\Application\Admin\TraitAdminUrl;
class ViewSliderSimpleEditAddSlide extends AbstractView {
use TraitAdminUrl;
protected $groupID = 0;
protected $groupTitle = '';
/**
* @var array
*/
protected $slider;
/**
* @param int $groupID
* @param string $groupTitle
*/
public function setGroupData($groupID, $groupTitle) {
$this->groupID = $groupID;
$this->groupTitle = $groupTitle;
}
/**
* @param array $slider
*/
public function setSlider($slider) {
$this->slider = $slider;
}
/**
* @return array
*/
public function getSlider() {
return $this->slider;
}
public function display() {
$this->layout = new LayoutDefault($this);
if ($this->groupID) {
$this->layout->addBreadcrumb(Sanitize::esc_html($this->groupTitle),
'ssi_16 ssi_16--folderclosed',
$this->getUrlSliderEdit($this->groupID));
}
$this->layout->addBreadcrumb(Sanitize::esc_html($this->slider['title']),
'ssi_16 ssi_16--image',
$this->getUrlSliderEdit($this->slider['id'],
$this->groupID));
$this->layout->addBreadcrumb(n2_('Simple edit'),
'ssi_16 ssi_16--cog',
$this->getUrlSliderSimpleEdit($this->slider['id'],
$this->groupID));
$topBar = new BlockTopBarMain($this);
$buttonSave = new BlockButtonSave($this);
$buttonSave->setLabel(n2_('Add slide'));
$buttonSave->addClass('n2_slider_add_slide');
$topBar->addPrimaryBlock($buttonSave);
$buttonBack = new BlockButtonBack($this);
$buttonBack->setUrl($this->getUrlSliderSimpleEdit($this->slider['id'],
$this->groupID));
$topBar->addPrimaryBlock($buttonBack);
$this->layout->setTopBar($topBar->toHTML());
$this->layout->addContent($this->render('SimpleEditAddSlide'));
$this->layout->render();
}
}PK9e�[@-�cmm3Application/Admin/Sliders/ControllerAjaxSliders.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Sliders;
use Nextend\Framework\Controller\Admin\AdminAjaxController;
use Nextend\Framework\Data\Data;
use Nextend\Framework\Filesystem\Filesystem;
use Nextend\Framework\Model\StorageSectionManager;
use Nextend\Framework\Notification\Notification;
use Nextend\Framework\Platform\Platform;
use Nextend\Framework\Request\Request;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\SmartSlider3\Application\Admin\TraitAdminUrl;
use Nextend\SmartSlider3\Application\Model\ModelSliders;
use Nextend\SmartSlider3\BackupSlider\ImportSlider;
use Nextend\SmartSlider3\Settings;
use RuntimeException;
class ControllerAjaxSliders extends AdminAjaxController {
use TraitAdminUrl;
public function actionList() {
$this->validateToken();
$parentID = Request::$REQUEST->getInt('parentID');
$this->validateVariable($parentID >= 0,
'parentID');
if ($parentID > 0) {
$orderBy = 'ordering';
$orderByDirection = 'ASC';
} else {
$orderBy = Settings::get('slidersOrder2',
'ordering');
$orderByDirection =
Settings::get('slidersOrder2Direction', 'ASC');
}
$slidersModel = new ModelSliders($this);
$sliders = $slidersModel->getAll($parentID,
'published', $orderBy, $orderByDirection);
$data = array();
foreach ($sliders as $slider) {
$data[] = array(
'id' => $slider['id'],
'alias' => $slider['alias'],
'title' => $slider['title'],
'thumbnail' =>
$this->getSliderThumbnail($slider),
'isGroup' => $slider['type']
== 'group',
'childrenCount' => $slider['slides']
> 0 ? $slider['slides'] : 0
);
}
$this->response->respond($data);
}
private function getSliderThumbnail($slider) {
$thumbnail = $slider['thumbnail'];
if (empty($thumbnail)) {
return '';
} else {
return ResourceTranslator::toUrl($thumbnail);
}
}
public function actionOrder() {
$this->validateToken();
$this->validatePermission('smartslider_edit');
$slidersModel = new ModelSliders($this);
$result =
$slidersModel->order(Request::$REQUEST->getVar('groupID',
0), Request::$REQUEST->getVar('sliderorder'),
Request::$REQUEST->getInt('isReversed', 1));
$this->validateDatabase($result);
Notification::success(n2_('Slider order saved.'));
$this->response->respond();
}
public function actionTrash() {
$this->validateToken();
$this->validatePermission('smartslider_delete');
$groupID = Request::$REQUEST->getInt('groupID', 0);
$this->validateVariable($groupID >= 0, 'groupID');
$ids = array_map('intval',
array_filter((array)Request::$REQUEST->getVar('sliders'),
'is_numeric'));
$this->validateVariable(count($ids), 'Slider');
$slidersModel = new ModelSliders($this);
$isTrash = false;
$isUnlink = false;
foreach ($ids as $id) {
if ($id > 0) {
$mode = $slidersModel->trash($id, $groupID);
switch ($mode) {
case 'trash':
$isTrash = true;
break;
case 'unlink':
$isUnlink = true;
break;
}
}
}
if ($isTrash) {
Notification::success(n2_('Slider(s) moved to the
trash.'));
}
if ($isUnlink) {
Notification::success(n2_('Slider(s) removed from the
group.'));
}
$this->response->respond();
}
public function actionEmptyTrash() {
$this->validateToken();
$this->validatePermission('smartslider_delete');
$slidersModel = new ModelSliders($this);
$slidersInTrash = $slidersModel->getAll('*',
'trash');
foreach ($slidersInTrash as $slider) {
$slidersModel->deletePermanently($slider['id']);
}
Notification::success(n2_('Slider(s) deleted permanently from
the trash.'));
$this->response->respond();
}
public function actionHideReview() {
$this->validateToken();
StorageSectionManager::getStorage('smartslider')
->set('free', 'review',
1);
$this->response->respond();
}
protected function actionImport() {
$this->validateToken();
if (empty($_FILES) && empty($_POST)) {
Notification::error(sprintf(n2_('Your server has an upload
file limit at %s, so if you have bigger export file, please use the local
import file method.'), @ini_get('post_max_size')));
$this->response->respond();
} else if (!empty($_POST)) {
$data = new
Data(Request::$REQUEST->getVar('slider'));
$restore = $data->get('restore', 0);
$file = '';
if (isset($_FILES['slider']) &&
isset($_FILES['slider']['tmp_name']['import-file']))
{
switch
($_FILES['slider']['error']['import-file']) {
case UPLOAD_ERR_OK:
case UPLOAD_ERR_NO_FILE:
break;
case UPLOAD_ERR_INI_SIZE:
case UPLOAD_ERR_FORM_SIZE:
throw new RuntimeException('Exceeded filesize
limit.');
default:
throw new RuntimeException('Unknown
errors.');
}
$file =
$_FILES['slider']['tmp_name']['import-file'];
}
if (empty($file)) {
$_file = $data->get('local-import-file');
if (!empty($_file)) {
$file = Platform::getPublicDirectory() . '/'
. $_file;
}
}
if (Filesystem::fileexists($file)) {
$import = new ImportSlider($this);
if ($restore) {
$import->enableReplace();
}
$groupID =
Request::$REQUEST->getVar('groupID', 0);
$sliderId = $import->import($file, $groupID,
$data->get('image-mode', 'clone'), 0);
if ($sliderId !== false) {
Notification::success(n2_('Slider
imported.'));
if ($data->get('delete')) {
@unlink($file);
}
$this->response->redirect($this->getUrlSliderEdit($sliderId,
$groupID));
} else {
$extension =
pathinfo($_FILES['slider']['name']['import-file'],
PATHINFO_EXTENSION);
if
(strpos($_FILES['slider']['name']['import-file'],
'sliders_unzip_to_import') !== false) {
Notification::error(n2_('You have to unzip
your ' .
$_FILES['slider']['name']['import-file'] .
' file to find the importable *.ss3 files!'));
$this->response->error();
} else if ($extension != 'ss3') {
Notification::error(n2_('Only *.ss3 files can
be uploaded!'));
$this->response->error();
} else {
Notification::error(n2_('Import
error!'));
$this->response->error();
}
$this->response->redirect($this->getUrlImport());
}
} else {
Notification::error(n2_('The imported file is not
readable!'));
$this->response->error();
}
}
}
}PK9e�[n$��/Application/Admin/Sliders/ControllerSliders.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Sliders;
use Nextend\Framework\Localization\Localization;
use Nextend\Framework\Misc\Zip\Creator;
use Nextend\Framework\Model\StorageSectionManager;
use Nextend\Framework\PageFlow;
use Nextend\Framework\Request\Request;
use Nextend\SmartSlider3\Application\Admin\AbstractControllerAdmin;
use Nextend\SmartSlider3\Application\Admin\Sliders\Pro\ViewSlidersActivate;
use Nextend\SmartSlider3\Application\Model\ModelLicense;
use Nextend\SmartSlider3\Application\Model\ModelSliders;
use Nextend\SmartSlider3\BackupSlider\ExportSlider;
use Nextend\SmartSlider3\Settings;
class ControllerSliders extends AbstractControllerAdmin {
protected function actionGettingStarted() {
if (!StorageSectionManager::getStorage('smartslider')
->get('tutorial',
'GettingStarted')) {
$view = new ViewSlidersGettingStarted($this);
$view->display();
} else {
$modelLicense = ModelLicense::getInstance();
if (!$modelLicense->hasKey()) {
$view = new ViewSlidersActivate($this);
$view->display();
} else {
$this->redirectToSliders();
}
}
}
protected function actionGettingStartedDontShow() {
StorageSectionManager::getStorage('smartslider')
->set('tutorial',
'GettingStarted', 1);
$this->redirectToSliders();
}
protected function actionIndex() {
$this->loadSliderManager();
$view = new ViewSlidersIndex($this);
$view->display();
}
protected function actionTrash() {
$view = new ViewSlidersTrash($this);
$view->display();
}
protected function actionOrderBy() {
$ordering = Request::$REQUEST->getCmd('ordering',
null);
if ($ordering == 'DESC' || $ordering == 'ASC')
{
Settings::set('slidersOrder2', 'ordering');
Settings::set('slidersOrder2Direction',
'ASC');
}
$time = Request::$REQUEST->getCmd('time', null);
if ($time == 'DESC' || $time == 'ASC') {
Settings::set('slidersOrder2', 'time');
Settings::set('slidersOrder2Direction', $time);
}
$title = Request::$REQUEST->getCmd('title', null);
if ($title == 'DESC' || $title == 'ASC') {
Settings::set('slidersOrder2', 'title');
Settings::set('slidersOrder2Direction', $title);
}
$this->redirectToSliders();
}
protected function actionExportAll() {
$slidersModel = new ModelSliders($this);
$sliders =
$slidersModel->getAll(Request::$REQUEST->getInt('currentGroupID',
0), 'published');
$ids = Request::$REQUEST->getVar('sliders');
$files = array();
foreach ($sliders as $slider) {
if (!empty($ids) && !in_array($slider['id'],
$ids)) {
continue;
}
$export = new ExportSlider($this, $slider['id']);
$files[] = $export->create(true);
}
$zip = new Creator();
foreach ($files as $file) {
$zip->addFile(file_get_contents($file), basename($file));
unlink($file);
}
PageFlow::cleanOutputBuffers();
header('Content-disposition: attachment;
filename=sliders_unzip_to_import.zip');
header('Content-type: application/zip');
echo $zip->file();
PageFlow::exitApplication();
}
protected function actionImport() {
if ($this->validatePermission('smartslider_edit')) {
$groupID = Request::$REQUEST->getVar('groupID',
0);
$view = new ViewSlidersImport($this);
$view->setGroupID($groupID);
$view->display();
}
}
}PK9e�[|�G
3Application/Admin/Sliders/Pro/Template/Activate.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Sliders\Pro;
/**
* @var $this ViewSlidersActivate
*/
?>
<div class="n2_page_activate">
<div class="n2_page_activate__heading">
<?php n2_e('Activate Smart Slider 3 Pro'); ?>
</div>
<div class="n2_page_activate__subheading">
<?php n2_e('Register Smart Slider 3 Pro on this domain to
enable auto update, slider templates and slide library.'); ?>
</div>
<div class="n2_page_activate__video">
<div
class="n2_page_activate__video_placeholder"></div>
<iframe width="560" height="315"
src="https://www.youtube-nocookie.com/embed/8t5p1Xxysfw?rel=0"
allow="accelerometer; autoplay; encrypted-media; gyroscope;
picture-in-picture" allowfullscreen></iframe>
</div>
<div class="n2_page_activate__buttons">
<div class="n2_page_activate__button_dont_show">
<a href="<?php echo $this->getUrlDashboard();
?>"><?php n2_e('Go to dashboard'); ?></a>
</div>
<div class="n2_page_activate__button_dashboard">
<a href="<?php echo $this->getUrlDashboard();
?>"
onclick="_N2.License.get().startActivation().done((function(){window.location=this.getAttribute('href');}).bind(this));return
false;"><?php n2_e('Activate'); ?></a>
</div>
</div>
</div>
PK9e�[������5Application/Admin/Sliders/Pro/ViewSlidersActivate.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Sliders\Pro;
use Nextend\Framework\View\AbstractView;
use Nextend\SmartSlider3\Application\Admin\Layout\LayoutDefault;
use Nextend\SmartSlider3\Application\Admin\TraitAdminUrl;
class ViewSlidersActivate extends AbstractView {
use TraitAdminUrl;
public function display() {
$this->layout = new LayoutDefault($this);
$this->layout->addContent($this->render('Activate'));
$this->layout->render();
}
}PK9e�[�z��5Application/Admin/Sliders/Template/GettingStarted.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Sliders;
/**
* @var $this ViewSlidersGettingStarted
*/
?>
<div class="n2_getting_started">
<div class="n2_getting_started__heading">
<?php n2_e('Welcome to Smart Slider 3'); ?>
</div>
<div class="n2_getting_started__subheading">
<?php n2_e('To help you get started, we\'ve put
together a super tutorial video that shows you the basic settings.');
?>
</div>
<div class="n2_getting_started__video">
<div
class="n2_getting_started__video_placeholder"></div>
<iframe width="560" height="315"
src="https://www.youtube-nocookie.com/embed/3PPtkRU7D74?rel=0"
allow="accelerometer; autoplay; encrypted-media; gyroscope;
picture-in-picture" allowfullscreen></iframe>
</div>
<div class="n2_getting_started__buttons">
<div class="n2_getting_started__button_dont_show">
<a href="<?php echo
$this->getUrlGettingStartedDontShow(); ?>"><?php
n2_e('Don\'t show again'); ?></a>
</div>
<div class="n2_getting_started__button_dashboard">
<a href="<?php echo $this->getUrlDashboard();
?>"><?php n2_e('Go to dashboard'); ?></a>
</div>
</div>
</div>PK9e�[Pq9�hh-Application/Admin/Sliders/Template/Import.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Sliders;
use Nextend\Framework\Asset\Js\Js;
/**
* @var ViewSlidersImport $this
*/
JS::addInline('new _N2.SliderImport();');
?>
<form id="n2-ss-form-slider-import" action="<?php echo
$this->getAjaxUrlImport($this->getGroupID()); ?>"
method="post">
<?php
$this->renderForm();
?>
</form>PK9e�[�Iј��7Application/Admin/Sliders/ViewSlidersGettingStarted.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Sliders;
use Nextend\Framework\View\AbstractView;
use Nextend\SmartSlider3\Application\Admin\Layout\LayoutDefault;
use Nextend\SmartSlider3\Application\Admin\TraitAdminUrl;
class ViewSlidersGettingStarted extends AbstractView {
use TraitAdminUrl;
public function display() {
$this->layout = new LayoutDefault($this);
$this->layout->addContent($this->render('GettingStarted'));
$this->layout->render();
}
}PK9e�[�"i6��/Application/Admin/Sliders/ViewSlidersImport.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Sliders;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\Grouping;
use Nextend\Framework\Form\Element\Message\Notice;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Select\SelectFile;
use Nextend\Framework\Form\Element\Token;
use Nextend\Framework\Form\Element\Upload;
use Nextend\Framework\Form\Form;
use Nextend\Framework\Platform\Platform;
use Nextend\Framework\View\AbstractView;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\TopBarMain\BlockTopBarMain;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButtonBack;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButtonImport;
use Nextend\SmartSlider3\Application\Admin\Layout\LayoutDefault;
use Nextend\SmartSlider3\Application\Admin\TraitAdminUrl;
class ViewSlidersImport extends AbstractView {
use TraitAdminUrl;
/**
* @var LayoutDefault
*/
protected $layout;
/**
* @var int
*/
protected $groupID;
public function display() {
$this->layout = new LayoutDefault($this);
$this->layout->addBreadcrumb(n2_('Import project'),
'', $this->getUrlImport());
$this->displayTopBar();
$this->displayHeader();
$this->layout->render();
}
protected function displayTopBar() {
$topBar = new BlockTopBarMain($this);
$buttonImport = new BlockButtonImport($this);
$buttonImport->addClass('n2_button--inactive');
$buttonImport->addClass('n2_slider_import');
$topBar->addPrimaryBlock($buttonImport);
$buttonBack = new BlockButtonBack($this);
$buttonBack->setUrl($this->getUrlDashboard());
$buttonBack->addClass('n2_slider_import_back');
$topBar->addPrimaryBlock($buttonBack);
$this->layout->setTopBar($topBar->toHTML());
}
protected function displayHeader() {
$this->layout->addContent($this->render('Import'));
}
public function renderForm() {
$form = new Form($this, 'slider');
new Token($form->getFieldsetHidden());
$settings = new ContainerTable($form->getContainer(),
'import-slider', n2_('Import project'));
$row1 = $settings->createRow('import-row-1');
$instructions = n2_('You can upload *.ss3 files which were
exported by Smart Slider 3.') . '<br>';
new Notice($row1, 'instructions',
n2_('Instruction'), $instructions);
$row2 = $settings->createRow('import-row-2');
new OnOff($row2, 'upload_or_local', n2_('Local
import'), 0, array(
'relatedFieldsOff' => array(
'sliderupload-grouping'
),
'relatedFieldsOn' => array(
'sliderlocal-import-grouping'
)
));
$uploadGrouping = new Grouping($row2, 'upload-grouping');
new Upload($uploadGrouping, 'import-file',
n2_('Upload file'));
new Notice($uploadGrouping, 'instructions', '',
sprintf(n2_('Your server\'s upload filesize limitation is %s, so
if your file is bigger, use the local import.'),
@ini_get('post_max_size')));
$localImportGrouping = new Grouping($row2,
'local-import-grouping');
new SelectFile($localImportGrouping, 'local-import-file',
n2_('File'), '', 'ss3');
new Notice($localImportGrouping, 'instructions',
'', sprintf(n2_('Files with <i>.ss3</i>
extension are listed from: %s'), Platform::getPublicDirectory()));
new OnOff($localImportGrouping, 'delete',
n2_('Delete file'), 0, array(
'tipLabel' => n2_('Delete file'),
'tipDescription' => n2_('Removes the selected
.ss3 file from your sever after the import.'),
));
$row3 = $settings->createRow('import-row-3');
new OnOff($row3, 'restore', n2_('Restore
slider'), 0, array(
'tipLabel' => n2_('Restore'),
'tipDescription' => n2_('The imported slider
will have the same ID as the original export has. If you have a slider with
the same ID, it will be overwritten.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1728-export-import-slider#import'
));
new Select($row3, 'image-mode', n2_('Image
mode'), 'clone', array(
'options' => array(
'clone' => n2_('Clone'),
'update' => n2_('Old site url'),
'original' => n2_('Original')
),
'tipLabel' => n2_('Image mode'),
'tipDescription' => n2_('You can choose how
the slide images are loaded.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1728-export-import-slider#image-mode'
));
$form->render();
}
/**
* @return int
*/
public function getGroupID() {
return $this->groupID;
}
/**
* @param int $groupID
*/
public function setGroupID($groupID) {
$this->groupID = $groupID;
}
}PK9e�[��*��.Application/Admin/Sliders/ViewSlidersIndex.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Sliders;
use Nextend\Framework\Localization\Localization;
use Nextend\Framework\View\AbstractView;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\Banner\BlockBannerActivate;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Dashboard\DashboardInfo\BlockDashboardInfo;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Dashboard\DashboardManager\BlockDashboardManager;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slider\SliderManager\BlockSliderManager;
use Nextend\SmartSlider3\Application\Admin\Layout\LayoutDefault;
use Nextend\SmartSlider3\Application\Model\ModelLicense;
class ViewSlidersIndex extends AbstractView {
/**
* @var LayoutDefault
*/
protected $layout;
public function display() {
$this->layout = new LayoutDefault($this);
$dashboardInfo = new BlockDashboardInfo($this);
$this->layout->addHeaderMenuItem($dashboardInfo->toHTML());
$this->displayHeader();
$this->displaySliderManager();
$dashboardManager = new BlockDashboardManager($this);
$this->layout->addContentBlock($dashboardManager);
$this->layout->render();
}
protected function displayHeader() {
$model = ModelLicense::getInstance();
if (!$model->hasKey()) {
ob_start();
$banner = new BlockBannerActivate($this);
$banner->display();
$this->layout->addContent(ob_get_clean());
}
}
protected function displaySliderManager() {
$sliderManager = new BlockSliderManager($this);
$this->layout->addContentBlock($sliderManager);
}
}
PK9e�[gI���.Application/Admin/Sliders/ViewSlidersTrash.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Sliders;
use Nextend\Framework\View\AbstractView;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\TopBarMain\BlockTopBarMain;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButton;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButtonBack;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slider\SliderTrash\BlockSliderTrash;
use Nextend\SmartSlider3\Application\Admin\Layout\LayoutDefault;
use Nextend\SmartSlider3\Application\Admin\TraitAdminUrl;
class ViewSlidersTrash extends AbstractView {
use TraitAdminUrl;
public function display() {
$this->layout = new LayoutDefault($this);
$this->layout->addBreadcrumb(n2_('Trash'),
'ssi_16 ssi_16--delete', $this->getUrlTrash());
$topBar = new BlockTopBarMain($this);
$buttonEmptyTrash = new BlockButton($this);
$buttonEmptyTrash->setLabel('Empty trash');
$buttonEmptyTrash->setBig();
$buttonEmptyTrash->setRed();
$buttonEmptyTrash->addClass('n2_slider_empty_trash');
$buttonEmptyTrash->addClass('n2_button--inactive');
$topBar->addPrimaryBlock($buttonEmptyTrash);
$buttonBack = new BlockButtonBack($this);
$buttonBack->setUrl($this->getUrlDashboard());
$buttonBack->addClass('n2_slider_settings_back');
$topBar->addPrimaryBlock($buttonBack);
$this->layout->setTopBar($topBar->toHTML());
$this->displaySliderTrash();
$this->layout->render();
}
protected function displaySliderTrash() {
$sliderManager = new BlockSliderTrash($this);
$this->layout->addContentBlock($sliderManager);
}
}PK9e�[)�0�-�-1Application/Admin/Slides/ControllerAjaxSlides.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Slides;
use Nextend\Framework\Controller\Admin\AdminAjaxController;
use Nextend\Framework\Filesystem\Filesystem;
use Nextend\Framework\Misc\Base64;
use Nextend\Framework\Notification\Notification;
use Nextend\Framework\Request\Request;
use Nextend\SmartSlider3\Application\Admin\TraitAdminUrl;
use Nextend\SmartSlider3\Application\Model\ModelSliders;
use Nextend\SmartSlider3\Application\Model\ModelSlides;
use Nextend\SmartSlider3\Settings;
use Nextend\SmartSlider3\Slider\Feature\Optimize;
use Nextend\SmartSlider3\Slider\Slide;
use Nextend\SmartSlider3\Slider\Slider;
class ControllerAjaxSlides extends AdminAjaxController {
use TraitAdminUrl;
public function actionEdit() {
$this->validateToken();
$this->validatePermission('smartslider_edit');
$groupID = Request::$REQUEST->getInt('groupID', 0);
$this->validateVariable($groupID >= 0, 'groupID');
$slidersModel = new ModelSliders($this);
$sliderId = Request::$REQUEST->getInt('sliderid');
$slider = $slidersModel->get($sliderId);
$this->validateDatabase($slider);
$slidesModel = new ModelSlides($this);
$this->validateDatabase($slidesModel->get(Request::$REQUEST->getInt('slideid')));
$response = array();
if (Settings::get('slide-as-file', 0) &&
isset($_FILES['slide'])) {
$slide =
Filesystem::readFile($_FILES['slide']['tmp_name']);
} else {
$slide = Request::$REQUEST->getVar('slide');
}
$guides = Request::$REQUEST->getVar('guides');
if
($slidesModel->save(Request::$REQUEST->getInt('slideid'),
$slide, $guides)) {
Notification::success(n2_('Slide saved.'));
if (Request::$REQUEST->getInt('generatorStatic')
== 1) {
$slideCount =
$slidesModel->convertDynamicSlideToSlides(Request::$REQUEST->getInt('slideid'));
if ($slideCount) {
Notification::success(sprintf(n2_('%d static
slides generated.'), $slideCount));
$this->response->redirect($this->getUrlSliderEdit($sliderId,
$groupID));
}
}
}
$this->response->respond($response);
}
public function actionRename() {
$this->validateToken();
$this->validatePermission('smartslider_edit');
$slideID = Request::$REQUEST->getInt('slideid');
$this->validateVariable($slideID > 0, 'Slide');
$title = Request::$REQUEST->getVar('title');
$slidersModel = new ModelSlides($this);
$slidersModel->setTitle($slideID, $title);
Notification::success(n2_('Slide renamed.'));
$this->response->respond();
}
public function actionFirst() {
$this->validateToken();
$this->validatePermission('smartslider_edit');
$slideId = Request::$REQUEST->getInt('id');
$this->validateVariable($slideId > 0, 'Slide id');
$slidesModel = new ModelSlides($this);
$slidesModel->first($slideId);
Notification::success(n2_('First slide changed.'));
$this->response->respond();
}
public function actionConvertToSlide() {
$this->validateToken();
$this->validatePermission('smartslider_edit');
$slideId = Request::$REQUEST->getInt('slideid');
$this->validateVariable($slideId > 0, 'Slide id');
$slidesModel = new ModelSlides($this);
$slidesModel->convertToSlide($slideId);
Notification::success(n2_('Static overlay converted to
slide.'));
$this->response->respond();
}
public function actionPublish() {
$this->validateToken();
$this->validatePermission('smartslider_edit');
$ids = array_map('intval',
array_filter((array)Request::$REQUEST->getVar('slides'),
'is_numeric'));
$this->validateVariable(count($ids), 'Slides');
$slidesModel = new ModelSlides($this);
foreach ($ids as $id) {
if ($id > 0) {
$slidesModel->publish($id);
}
}
Notification::success(n2_('Slide published.'));
$this->response->respond();
}
public function actionUnPublish() {
$this->validateToken();
$this->validatePermission('smartslider_edit');
$ids = array_map('intval',
array_filter((array)Request::$REQUEST->getVar('slides'),
'is_numeric'));
$this->validateVariable(count($ids), 'Slides');
$slidesModel = new ModelSlides($this);
foreach ($ids as $id) {
if ($id > 0) {
$slidesModel->unPublish($id);
}
}
Notification::success(n2_('Slide unpublished.'));
$this->response->respond();
}
public function actionOrder() {
$this->validateToken();
$this->validatePermission('smartslider_edit');
$sliderid = Request::$REQUEST->getInt('sliderid');
$this->validateVariable($sliderid > 0, 'Slider');
$slidesModel = new ModelSlides($this);
$result = $slidesModel->order($sliderid,
Request::$REQUEST->getVar('slideorder'));
$this->validateDatabase($result);
Notification::success(n2_('Slide order saved.'));
$this->response->respond();
}
public function actionCopy() {
$this->validateToken();
$this->validatePermission('smartslider_edit');
$groupID = Request::$REQUEST->getInt('targetGroupID',
0);
$this->validateVariable($groupID >= 0,
'targetGroupID');
$slideId = Request::$REQUEST->getInt('slideid');
$this->validateVariable($slideId > 0, 'Slide');
$sliderID =
Request::$REQUEST->getInt('targetSliderID');
$this->validateVariable($sliderID > 0, 'Slider
ID');
$slidesModel = new ModelSlides($this);
$newSlideId = $slidesModel->copyTo($slideId, false, $sliderID);
$slide = $slidesModel->get($newSlideId);
$this->validateDatabase($slide);
Notification::success(n2_('Slide(s) copied.'));
$this->response->redirect($this->getUrlSliderEdit($sliderID,
$groupID));
}
public function actionCopySlides() {
$this->validateToken();
$this->validatePermission('smartslider_edit');
$groupID = Request::$REQUEST->getInt('targetGroupID',
0);
$this->validateVariable($groupID >= 0,
'targetGroupID');
$ids = array_map('intval',
array_filter((array)Request::$REQUEST->getVar('slides'),
'is_numeric'));
$this->validateVariable(count($ids), 'Slides');
$sliderID =
Request::$REQUEST->getInt('targetSliderID');
$this->validateVariable($sliderID > 0, 'Slider
ID');
$slidesModel = new ModelSlides($this);
foreach ($ids as $id) {
$slidesModel->copyTo($id, false, $sliderID);
}
Notification::success(n2_('Slide(s) copied.'));
$this->response->redirect($this->getUrlSliderEdit($sliderID,
$groupID));
}
public function actionDuplicate() {
$this->validateToken();
$this->validatePermission('smartslider_edit');
$groupID = Request::$REQUEST->getInt('groupID');
$this->validateVariable($groupID >= 0, 'groupID');
$slideId = Request::$REQUEST->getInt('slideid');
$this->validateVariable($slideId > 0, 'Slide');
$slidesModel = new ModelSlides($this);
$newSlideId = $slidesModel->copyTo($slideId);
$slide = $slidesModel->get($newSlideId);
$this->validateDatabase($slide);
Notification::success(n2_('Slide duplicated.'));
$sliderObj = new Slider($this, $slide['slider'], array(),
true);
$sliderObj->initSlider();
$optimize = new Optimize($sliderObj);
$slideObj = new Slide($sliderObj, $slide);
$slideObj->initGenerator();
$slideObj->fillSample();
$view = new ViewAjaxSlideBox($this);
$view->setGroupID($groupID);
$view->setSlider($sliderObj);
$view->setSlide($slideObj);
$view->setOptimize($optimize);
$this->response->respond($view->display());
}
public function actionDelete() {
$this->validateToken();
$this->validatePermission('smartslider_delete');
$ids = array_map('intval',
array_filter((array)Request::$REQUEST->getVar('slides'),
'is_numeric'));
$this->validateVariable(count($ids), 'Slide');
$slidesModel = new ModelSlides($this);
foreach ($ids as $id) {
if ($id > 0) {
$slidesModel->delete($id);
}
}
Notification::success(n2_('Slide deleted.'));
$this->response->respond();
}
public function actionCreate() {
$this->validateToken();
$this->validatePermission('smartslider_edit');
$type = Request::$REQUEST->getVar('type');
$groupID = Request::$REQUEST->getInt('groupID');
$this->validateVariable($groupID >= 0, 'groupID');
$sliderId = Request::$REQUEST->getInt('sliderid');
$this->validateVariable($sliderId > 0, 'Slider');
$slidesModel = new ModelSlides($this);
$createdSlidesID = array();
switch ($type) {
case 'image':
$images =
json_decode(Base64::decode(Request::$REQUEST->getVar('images')),
true);
$this->validateVariable(count($images),
'Images');
foreach ($images as $image) {
$createdSlidesID[] =
$slidesModel->createQuickImage($image, $sliderId);
}
break;
case 'empty-slide':
$createdSlidesID[] =
$slidesModel->createQuickEmptySlide($sliderId);
break;
case 'video':
$video =
json_decode(urldecode(Base64::decode(Request::$REQUEST->getVar('video'))),
true);
$this->validateVariable($video, 'Video');
$createdSlidesID[] =
$slidesModel->createQuickVideo($video, $sliderId);
break;
case 'post':
$post = Request::$REQUEST->getVar('post');
$this->validateVariable($post, 'Post');
$createdSlidesID[] =
$slidesModel->createQuickPost($post, $sliderId);
break;
case 'static-overlay':
$createdSlidesID[] =
$slidesModel->createQuickStaticOverlay($sliderId);
break;
}
if (!empty($createdSlidesID)) {
$sliderObj = new Slider($this, $sliderId, array());
$sliderObj->initSlider();
$optimize = new Optimize($sliderObj);
$responseBody = '';
foreach ($createdSlidesID as $slideID) {
$slide = $slidesModel->get($slideID);
$slideObj = new Slide($sliderObj, $slide);
$slideObj->initGenerator();
$slideObj->fillSample();
$view = new ViewAjaxSlideBox($this);
$view->setGroupID($groupID);
$view->setSlider($sliderObj);
$view->setSlide($slideObj);
$view->setOptimize($optimize);
$responseBody .= $view->display();
}
if (count($createdSlidesID) > 1) {
Notification::success(n2_('Slides created.'));
} else {
Notification::success(n2_('Slide created.'));
}
$this->response->respond($responseBody);
} else {
Notification::error(n2_('Failed to create slides.'));
$this->response->respond();
}
}
}PK9e�[�����-Application/Admin/Slides/ControllerSlides.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Slides;
use Nextend\Framework\Localization\Localization;
use Nextend\Framework\Notification\Notification;
use Nextend\Framework\Request\Request;
use Nextend\SmartSlider3\Application\Admin\AbstractControllerAdmin;
use Nextend\SmartSlider3\Application\Model\ModelSliders;
use Nextend\SmartSlider3\Application\Model\ModelSlides;
use Nextend\SmartSlider3\SmartSlider3Info;
class ControllerSlides extends AbstractControllerAdmin {
public function initialize() {
parent::initialize();
SmartSlider3Info::$forceDesktop = true;
}
public function actionEdit() {
if ($this->validatePermission('smartslider_edit')) {
$slidersModel = new ModelSliders($this);
$sliderID = Request::$REQUEST->getInt('sliderid');
$slider = $slidersModel->get($sliderID);
if ($this->validateDatabase($slider, false)) {
$slidesModel = new ModelSlides($this);
$slideID =
Request::$REQUEST->getInt('slideid');
$slide = $slidesModel->get($slideID);
if ($slide) {
$groupData = $this->getGroupData($sliderID);
$view = new ViewSlidesEdit($this);
$view->setGroupData($groupData['group_id'],
$groupData['title']);
$view->setSlider($slider);
$view->setSlide($slide);
$view->display();
} else {
$this->redirect($this->getUrlDashboard());
}
} else {
$this->redirect($this->getUrlDashboard());
}
}
}
public function actionDelete() {
if ($this->validateToken() &&
$this->validatePermission('smartslider_delete')) {
if ($slideId =
Request::$REQUEST->getInt('slideid')) {
$slidesModel = new ModelSlides($this);
$slidesModel->delete($slideId);
}
$sliderId = Request::$REQUEST->getInt("sliderid");
if ($sliderId) {
$groupData = $this->getGroupData($sliderId);
$this->redirect($this->getUrlSliderEdit($sliderId,
$groupData['group_id']));
}
$this->redirect($this->getUrlDashboard());
}
}
public function actionDuplicate() {
if ($this->validateToken() &&
$this->validatePermission('smartslider_edit')) {
if ($slideId =
Request::$REQUEST->getInt('slideid')) {
$slidesModel = new ModelSlides($this);
$newSlideId = $slidesModel->copyTo($slideId);
Notification::success(n2_('Slide duplicated.'));
$sliderID =
Request::$REQUEST->getInt("sliderid");
$groupData = $this->getGroupData($sliderID);
$this->redirect($this->getUrlSlideEdit($newSlideId,
$sliderID, $groupData['group_id']));
}
$this->redirect($this->getUrlDashboard());
}
}
}PK9e�[7bl��2Application/Admin/Slides/Template/AjaxSlideBox.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Slides;
/**
* @var $this ViewAjaxSlideBox
*/
$this->renderSlideBlock();PK9e�[���*Application/Admin/Slides/Template/Edit.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Slides;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\Platform\Platform;
use Nextend\Framework\Request\Request;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Application\Model\ModelLicense;
use Nextend\SmartSlider3\Settings;
use Nextend\SmartSlider3\SmartSlider3Info;
use Nextend\SmartSlider3Pro\LayerAnimation\LayerAnimationStorage;
/**
* @var $this ViewSlidesEdit
*/
JS::addGlobalInline('document.documentElement.classList.add("n2_html--application-only");');
Js::addGlobalInline("window.ss3LayerAnimationPresets=" .
LayerAnimationStorage::getInstance()
->getData() . ";");
$externals = Settings::get('external-css-files');
if (!empty($externals)) {
$externals = explode("\n", $externals);
foreach ($externals as $external) {
echo "<link rel='stylesheet' href='" .
$external . "' type='text/css'
media='all'>";
}
}
$slider = $this->frontendSlider;
$renderedSlider = $this->renderedSlider;
?>
<form id="n2-ss-form-slide-edit" action="#"
method="post">
<?php
$this->formManager->render();
?>
</form>
<div id='n2-ss-slide-canvas-container'
class='n2_slide_editor_slider'>
<?php echo Html::tag('div', array(
'class' =>
"n2_slide_editor_slider__editor",
'style' => 'width:' .
$slider->features->responsive->sizes['desktopPortrait']['width']
. 'px'
), Html::tag('div', array(
'class' =>
"n2_slide_editor_slider__editor_inner"
), $renderedSlider)); ?>
</div>
<?php
$fillMode = $slider->params->get('backgroundMode',
'fill');
if ($fillMode == 'fixed' || $fillMode == 'tile') {
$fillMode = 'fill';
}
$options = array(
'isUploadDisabled' =>
defined('N2_IMAGE_UPLOAD_DISABLE'),
'slideBackgroundMode' => $fillMode,
'settingsGoProUrl' =>
SmartSlider3Info::getProUrlPricing(array(
'utm_source' =>
'go-pro-button-editor-settings',
'utm_medium' => 'smartslider-' .
Platform::getName() . '-' . SmartSlider3Info::$plan,
'utm_campaign' => SmartSlider3Info::$campaign
))
);
if (!defined('N2_IMAGE_UPLOAD_DISABLE')) {
$options['uploadUrl'] =
$this->createAjaxUrl(array('browse/upload'));
$options['uploadDir'] = 'slider' .
$slider->sliderId;
}
if (ModelLicense::getInstance()
->maybeActiveLazy()) {
$options['sectionLibraryFree'] = false;
$options['sectionLibraryUrl'] =
'https://smartslider3.com/slides/v2/pro2e4G2dR';
} else {
$options['sectionLibraryUrl'] =
'https://smartslider3.com/slides/v2/free';
}
JS::addInline('new _N2.SlideEdit(' . json_encode(array(
'ajaxUrl' => $this->getAjaxUrl(),
'slideAsFile' =>
intval(Settings::get('slide-as-file', 0)),
'nextendAction' =>
Request::$GET->getCmd('nextendaction'),
'previewInNewWindow' =>
!!Settings::get('preview-new-window', 0),
'previewUrl' =>
$this->getUrlPreviewSlider($slider->data->get('id'),
$this->getSlideID()),
'sliderElementID' => $slider->elementId,
'slideEditorOptions' => $options
)) . ');');
PK9e�[a�<-Application/Admin/Slides/ViewAjaxSlideBox.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Slides;
use Nextend\Framework\View\AbstractViewAjax;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slide\SlideBox\BlockSlideBox;
use Nextend\SmartSlider3\Slider\Feature\Optimize;
use Nextend\SmartSlider3\Slider\Slide;
use Nextend\SmartSlider3\Slider\Slider;
class ViewAjaxSlideBox extends AbstractViewAjax {
protected $groupID = 0;
/** @var Slider */
protected $slider;
/** @var Slide */
protected $slide;
/** @var Optimize */
protected $optimize;
public function display() {
return $this->render('AjaxSlideBox');
}
public function renderSlideBlock() {
$blockSlideBox = new BlockSlideBox($this);
$blockSlideBox->setGroupID($this->groupID);
$blockSlideBox->setSlider($this->slider);
$blockSlideBox->setSlide($this->slide);
$blockSlideBox->setOptimize($this->optimize);
$blockSlideBox->display();
}
/**
* @param int $groupID
*/
public function setGroupID($groupID) {
$this->groupID = $groupID;
}
/**
* @return Slider
*/
public function getSlider() {
return $this->slider;
}
/**
* @param Slider $slider
*/
public function setSlider($slider) {
$this->slider = $slider;
}
/**
* @return Slide
*/
public function getSlide() {
return $this->slide;
}
/**
* @param Slide $slide
*/
public function setSlide($slide) {
$this->slide = $slide;
}
/**
* @return Optimize
*/
public function getOptimize() {
return $this->optimize;
}
/**
* @param Optimize $optimize
*/
public function setOptimize($optimize) {
$this->optimize = $optimize;
}
}PK9e�[���k�$�$+Application/Admin/Slides/ViewSlidesEdit.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Slides;
use Nextend\Framework\Localization\Localization;
use Nextend\Framework\Request\Request;
use Nextend\Framework\Sanitize;
use Nextend\Framework\View\AbstractView;
use Nextend\SmartSlider3\Application\Admin\FormManager\FormManagerSlide;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\Header\BlockHeader;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Core\TopBarGroup\BlockTopBarGroup;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButton;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButtonBack;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButtonPlainIcon;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButtonSave;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButtonSpacer;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slide\AddLayer\BlockAddLayer;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slide\EditorOverlay\BlockEditorOverlay;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slide\LayerWindow\BlockLayerWindow;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slide\SlideManager\BlockSlideManager;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slider\DeviceZoom\BlockDeviceZoom;
use Nextend\SmartSlider3\Application\Admin\Layout\LayoutEditor;
use Nextend\SmartSlider3\Application\Admin\TraitAdminUrl;
use Nextend\SmartSlider3\Application\Model\ModelSlides;
use Nextend\SmartSlider3\Slider\Admin\AdminSlider;
use Nextend\SmartSlider3\Slider\Slider;
class ViewSlidesEdit extends AbstractView {
use TraitAdminUrl;
/** @var LayoutEditor */
protected $layout;
/**
* @var BlockEditorOverlay
*/
protected $editorOverlay;
/** @var ModelSlides */
protected $model;
/**
* @var Slider
*/
protected $frontendSlider;
/**
* @var string
*/
protected $renderedSlider;
protected $groupID = 0;
protected $groupTitle = '';
protected $slider;
protected $slide = false;
/**
* @var BlockHeader
*/
protected $blockHeader;
/**
* @var FormManagerSlide
*/
protected $formManager;
public function __construct($controller) {
parent::__construct($controller);
$this->model = new ModelSlides($this);
}
public function display() {
$locale = setlocale(LC_NUMERIC, 0);
setlocale(LC_NUMERIC, "C");
$this->layout = new LayoutEditor($this);
$this->editorOverlay = new BlockEditorOverlay($this);
$this->layout->setEditorOverlay($this->editorOverlay);
$this->frontendSlider = new
AdminSlider($this->MVCHelper,
Request::$GET->getInt('sliderid'), array(
'disableResponsive' => true
));
$this->frontendSlider->setEditedSlideID($this->getSlideID());
$this->frontendSlider->initSlider();
$this->frontendSlider->initSlides();
/**
* Layer window should be rendered before the slider render as
layers items might add CSS and JS codes to it.
*/
$layerWindowBlock = new BlockLayerWindow($this);
$layerWindowBlock->setRenderableAdminSlider($this->frontendSlider);
$this->editorOverlay->setContentLayerWindow($layerWindowBlock->toHTML());
$this->frontendSlider->initAll();
$this->frontendSlider->addScript('new
_N2.DeviceChanger(this);');
$this->renderedSlider = $this->frontendSlider->render();
$this->formManager = new FormManagerSlide($this,
$this->groupID, $this->frontendSlider, $this->slide);
$this->layout->addBreadcrumb(n2_('Dashboard'),
'ssi_16 ssi_16--dashboard', $this->getUrlDashboard());
if ($this->groupID) {
$this->layout->addBreadcrumb(Sanitize::esc_html($this->groupTitle),
'ssi_16 ssi_16--folderclosed',
$this->getUrlSliderEdit($this->groupID));
}
$this->layout->addBreadcrumb(Sanitize::esc_html($this->slider['title']),
'ssi_16 ssi_16--image',
$this->getUrlSliderEdit($this->slider['id'],
$this->groupID));
$this->addActiveBreadcrumb();
if (!empty($this->slide['generator_id'])) {
$this->layout->addBreadcrumb(n2_('Generator'),
'ssi_16 ssi_16--cog',
$this->getUrlGeneratorEdit($this->slide['generator_id'],
$this->groupID));
}
$slideManager = new BlockSlideManager($this);
$slideManager->setGroupID($this->groupID);
$slideManager->setSliderID($this->slider['id']);
$slideManager->setBreadcrumbOpener(true);
$this->editorOverlay->setSlideManager($slideManager);
$this->renderTopBar();
$blockAddLayer = new BlockAddLayer($this);
$blockAddLayer->setSliderType($this->frontendSlider->data->get('type'));
$this->editorOverlay->setBlockAddLayer($blockAddLayer);
$this->layout->addContent($this->render('Edit'));
$this->renderLayout();
setlocale(LC_NUMERIC, $locale);
}
protected function renderLayout() {
$this->layout->render();
}
protected function addActiveBreadcrumb() {
$breadCrumb =
$this->layout->addBreadcrumb(n2_('Slides') . '<i
class="ssi_16 ssi_16--selectarrow"></i>',
'ssi_16 ssi_16--slides', '#');
$breadCrumb->addClass('n2_nav_bar__breadcrumb_button_slides');
$breadCrumb->setIsActive(true);
}
private function renderTopBar() {
$topBar = $this->editorOverlay->getTopBar();
$buttonSave = new BlockButtonSave($this);
$buttonSave->addClass('n2_button--inactive');
$buttonSave->addClass('n2_slide_settings_save');
$topBar->addPrimaryBlock($buttonSave);
$buttonBack = new BlockButtonBack($this);
$buttonBack->setUrl($this->getUrlSliderEdit($this->getSliderID(),
$this->groupID));
$buttonBack->addClass('n2_slide_settings_back');
$topBar->addPrimaryBlock($buttonBack);
if ($this->slide &&
$this->slide['generator_id'] > 0) {
$buttonStaticSave = new BlockButton($this);
$buttonStaticSave->setLabel(n2_('Static save'));
$buttonStaticSave->addClass('n2_slide_generator_static_save');
$topBar->addPrimaryBlock($buttonStaticSave);
}
$narrowGroup = new BlockTopBarGroup($this);
$narrowGroup->setNarrow();
$buttonRedo = new BlockButtonPlainIcon($this);
$buttonRedo->addClass('n2_top_bar_button_icon');
$buttonRedo->addClass('n2_ss_history_action');
$buttonRedo->addClass('n2_ss_history_action--redo');
$buttonRedo->setIcon('ssi_24 ssi_24--redo');
$buttonRedo->addAttribute('data-n2tip',
n2_('Redo'));
$buttonRedo->addAttribute('data-n2tipv', -20);
$narrowGroup->addBlock($buttonRedo);
$buttonUndo = new BlockButtonPlainIcon($this);
$buttonUndo->addClass('n2_top_bar_button_icon');
$buttonUndo->addClass('n2_ss_history_action');
$buttonUndo->addClass('n2_ss_history_action--undo');
$buttonUndo->setIcon('ssi_24 ssi_24--undo');
$buttonUndo->addAttribute('data-n2tip',
n2_('Undo'));
$buttonUndo->addAttribute('data-n2tipv', -20);
$narrowGroup->addBlock($buttonUndo);
$topBar->addPrimaryBlock($narrowGroup);
$spacer = new BlockButtonSpacer($this);
$spacer->setIsVisible(true);
$topBar->addPrimaryBlock($spacer);
$deviceZoom = new BlockDeviceZoom($this);
$topBar->addPrimaryBlock($deviceZoom);
$buttonPreview = new BlockButtonPlainIcon($this);
$buttonPreview->addAttribute('id',
'n2-ss-preview');
$buttonPreview->addClass('n2_top_bar_button_icon');
$buttonPreview->addClass('n2_top_bar_main__preview');
$buttonPreview->setIcon('ssi_24 ssi_24--preview');
$buttonPreview->addAttribute('data-n2tip',
n2_('Preview'));
$buttonPreview->setUrl($this->getUrlPreviewIndex($this->getSliderID()));
$topBar->addPrimaryBlock($buttonPreview);
}
public function getModel() {
return $this->model;
}
/**
* @param int $groupID
* @param string $groupTitle
*/
public function setGroupData($groupID, $groupTitle) {
$this->groupID = $groupID;
$this->groupTitle = $groupTitle;
}
public function getSliderID() {
return $this->slider['id'];
}
/**
* @param array $slider
*/
public function setSlider($slider) {
$this->slider = $slider;
}
/**
* @param array $slide
*/
public function setSlide($slide) {
$this->slide = $slide;
}
public function getSlideID() {
return $this->slide['id'];
}
public function getAjaxUrl() {
if ($this->slide) {
return $this->createAjaxUrl(array(
'slides/edit',
array(
'groupID' => $this->groupID,
'sliderid' => $this->getSliderID(),
'slideid' => $this->getSlideID()
)
));
}
return $this->createAjaxUrl(array(
'slides/create',
array(
'groupID' => $this->groupID,
'sliderid' => $this->getSliderID(),
'slideid' => $this->getSlideID()
)
));
}
}PK9e�[��)e=e=#Application/Admin/TraitAdminUrl.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin;
use Nextend\Framework\Pattern\MVCHelperTrait;
trait TraitAdminUrl {
/** @var MVCHelperTrait */
protected $MVCHelper;
public function getUrlGettingStarted() {
return $this->createUrl(array(
"sliders/gettingstarted"
));
}
public function getUrlGettingStartedDontShow() {
return $this->createUrl(array(
"sliders/gettingStartedDontShow"
));
}
public function getUrlDashboard() {
return $this->createUrl(array(
"sliders/index"
));
}
public function getUrlDashboardOrderBy($orderBy, $direction) {
$args = array();
$args[$orderBy] = $direction;
return $this->createUrl(array(
'sliders/orderby',
$args
), true);
}
public function getUrlDashboardExportAll($groupID) {
return $this->createUrl(array(
"sliders/exportAll",
array(
'currentGroupID' => $groupID,
'sliders' => array()
)
), true);
}
public function getAjaxUrlHideReview() {
return $this->createAjaxUrl(array(
'sliders/HideReview'
));
}
public function getUrlHidePromoUpgrade() {
return $this->createUrl(array(
'sliders/hidePromoUpgrade'
), true);
}
/**
* @return string
*/
public function getUrlTrash() {
return $this->createUrl(array(
"sliders/trash"
));
}
/**
* @return string
*/
public function getUrlImport($groupID = 0) {
return $this->createUrl(array(
"sliders/import",
array(
'groupID' => $groupID
)
));
}
/**
* @return string
*/
public function getAjaxUrlImport($groupID = 0) {
return $this->createAjaxUrl(array(
"sliders/import",
array(
'groupID' => $groupID
)
));
}
/**
* @param int $sliderID
* @param int $groupID
*
* @return string
*/
public function getUrlSliderEdit($sliderID, $groupID = 0) {
return $this->createUrl(array(
"slider/edit",
array(
'sliderid' => $sliderID,
'groupID' => $groupID
)
));
}
public function getAjaxUrlSliderEdit($sliderID) {
return $this->createAjaxUrl(array(
"slider/edit",
array(
'sliderid' => $sliderID
)
));
}
/**
* @param int $sliderID
* @param int $groupID
*
* @return string
*/
public function getUrlSliderSimpleEdit($sliderID, $groupID = 0) {
return $this->createUrl(array(
"slider/simpleedit",
array(
'sliderid' => $sliderID,
'groupID' => $groupID
)
));
}
/**
* @param int $sliderID
* @param int $groupID
*
* @return string
*/
public function getUrlSliderSimpleEditAddSlide($sliderID, $groupID = 0)
{
return $this->createUrl(array(
"slider/simpleeditaddslide",
array(
'sliderid' => $sliderID,
'groupID' => $groupID
)
));
}
/**
* @param int $sliderID
* @param int $groupID
*
* @return string
*/
public function getUrlSliderMoveToTrash($sliderID, $groupID) {
return $this->createUrl(array(
'slider/trash',
array(
'sliderid' => $sliderID,
'groupID' => $groupID
)
), true);
}
/**
* @param int $sliderID
* @param int $groupID
*
* @return string
*/
public function getUrlSliderDuplicate($sliderID, $groupID) {
return $this->createUrl(array(
'slider/duplicate',
array(
'sliderid' => $sliderID,
'groupID' => $groupID
)
), true);
}
/**
* @param int $sliderID
*
* @return string
*/
public function getUrlSliderExport($sliderID) {
return $this->createUrl(array(
'slider/export',
array(
'sliderid' => $sliderID
)
), true);
}
/**
* @param int $sliderID
*
* @return string
*/
public function getUrlSliderExportHtml($sliderID) {
return $this->createUrl(array(
'slider/exporthtml',
array(
'sliderid' => $sliderID
)
), true);
}
/**
* @param int $sliderID
*
* @return string
*/
public function getUrlSliderClearCache($sliderID) {
return $this->createUrl(array(
'slider/clearcache',
array(
'sliderid' => $sliderID
)
), true);
}
/**
* @param int $sliderID
*
* @return string
*/
public function getUrlPreviewIndex($sliderID) {
return $this->createUrl(array(
"preview/index",
array(
'sliderid' => $sliderID
)
), true);
}
public function getUrlPreviewFull($sliderID) {
return $this->createUrl(array(
"preview/full",
array(
'sliderid' => $sliderID
)
), true);
}
/**
* @param int $sliderID
* @param bool|string $slideID
*
* @return string
*/
public function getUrlPreviewSlider($sliderID, $slideID = false) {
$args = array(
'sliderid' => $sliderID
);
if ($slideID) {
$args['slideId'] = $slideID;
}
return $this->createUrl(array(
"preview/slider",
$args
), true);
}
/**
* @param int $generatorID
*
* @return string
*/
public function getUrlPreviewGenerator($generatorID) {
return $this->createUrl(array(
"preview/generator",
array(
'generator_id' => $generatorID
)
), true);
}
public function getUrlSlidesUniversal($sliderID, $groupID) {
return $this->createUrl(array(
"slides/index",
array(
'groupID' => $groupID,
'sliderid' => $sliderID
)
));
}
public function getAjaxUrlSlidesUniversal($sliderID, $groupID) {
return $this->createAjaxUrl(array(
"slides/index",
array(
'groupID' => $groupID,
'sliderid' => $sliderID
)
));
}
public function getAjaxUrlSlidesCreate() {
return $this->createAjaxUrl(array(
"slider/create"
));
}
public function getUrlSlideEdit($slideID, $sliderID, $groupID) {
return $this->createUrl(array(
"slides/edit",
array(
'groupID' => $groupID,
'sliderid' => $sliderID,
'slideid' => $slideID
)
));
}
public function getUrlSlidePublish($slideID, $sliderID, $groupID) {
return $this->createUrl(array(
"slides/publish",
array(
'groupID' => $groupID,
'sliderid' => $sliderID,
'slideid' => $slideID
)
), true);
}
public function getUrlSlideUnPublish($slideID, $sliderID, $groupID) {
return $this->createUrl(array(
"slides/unpublish",
array(
'groupID' => $groupID,
'sliderid' => $sliderID,
'slideid' => $slideID
)
), true);
}
public function getUrlGeneratorCreate($sliderID, $groupID) {
return $this->createUrl(array(
"generator/create",
array(
'sliderid' => $sliderID,
'groupID' => $groupID
)
));
}
/**
* @param string $generatorGroupName
* @param int $sliderID
* @param int $groupID
*
* @return string
*/
public function getUrlGeneratorCheckConfiguration($generatorGroupName,
$sliderID, $groupID) {
return $this->createUrl(array(
"generator/checkConfiguration",
array(
'sliderid' => $sliderID,
'groupID' => $groupID,
'group' => $generatorGroupName
)
));
}
/**
* @param string $generatorGroupName
* @param int $sliderID
* @param int $groupID
*
* @return string
*/
public function
getAjaxUrlGeneratorCheckConfiguration($generatorGroupName, $sliderID,
$groupID) {
return $this->createAjaxUrl(array(
"generator/checkConfiguration",
array(
'sliderid' => $sliderID,
'groupID' => $groupID,
'group' => $generatorGroupName
)
));
}
/**
* @param string $generatorGroupName
* @param int $sliderID
* @param int $groupID
*
* @return string
*/
public function getUrlGeneratorCreateStep2($generatorGroupName,
$sliderID, $groupID) {
return $this->createUrl(array(
"generator/createStep2",
array(
'sliderid' => $sliderID,
'groupID' => $groupID,
'group' => $generatorGroupName
)
));
}
/**
* @param string $generatorGroupName
* @param string $generatorTypeName
* @param int $sliderID
* @param int $groupID
*
* @return string
*/
public function getUrlGeneratorCreateSettings($generatorGroupName,
$generatorTypeName, $sliderID, $groupID) {
return $this->createUrl(array(
"generator/createSettings",
array(
'sliderid' => $sliderID,
'groupID' => $groupID,
'group' => $generatorGroupName,
'type' => $generatorTypeName
)
));
}
/**
* @param string $generatorGroupName
* @param string $generatorTypeName
* @param int $sliderID
* @param int $groupID
*
* @return string
*/
public function getAjaxUrlGeneratorCreateSettings($generatorGroupName,
$generatorTypeName, $sliderID, $groupID) {
return $this->createAjaxUrl(array(
"generator/createSettings",
array(
'sliderid' => $sliderID,
'groupID' => $groupID,
'group' => $generatorGroupName,
'type' => $generatorTypeName
)
));
}
public function getUrlGeneratorEdit($generatorID, $groupID) {
return $this->createUrl(array(
"generator/edit",
array(
'generator_id' => $generatorID,
'groupID' => $groupID
)
));
}
public function getAjaxUrlGeneratorEdit($generatorID, $groupID) {
return $this->createAjaxUrl(array(
"generator/edit",
array(
'generator_id' => $generatorID,
'groupID' => $groupID
)
));
}
/**
*
* @return string
*/
public function getUrlSettingsDefault() {
return $this->createUrl(array(
'settings/default'
));
}
/**
*
* @return string
*/
public function getAjaxUrlSettingsDefault() {
return $this->createAjaxUrl(array(
'settings/default'
));
}
/**
*
* @return string
*/
public function getUrlSettingsClearCache() {
return $this->createUrl(array(
'settings/clearcache',
));
}
/**
*
* @return string
*/
public function getAjaxUrlSettingsClearCache() {
return $this->createAjaxUrl(array(
'settings/clearcache',
));
}
/**
*
* @return string
*/
public function getUrlSettingsFramework() {
return $this->createUrl(array(
'settings/framework'
));
}
/**
*
* @return string
*/
public function getAjaxUrlSettingsFramework() {
return $this->createAjaxUrl(array(
'settings/framework'
));
}
/**
*
* @return string
*/
public function getUrlSettingsFonts() {
return $this->createUrl(array(
'settings/fonts'
));
}
/**
*
* @return string
*/
public function getAjaxUrlSettingsFonts() {
return $this->createAjaxUrl(array(
'settings/fonts'
));
}
/**
*
* @return string
*/
public function getUrlSettingsItemDefaults() {
return $this->createUrl(array(
'settings/itemDefaults'
));
}
/**
*
* @return string
*/
public function getAjaxUrlSettingsItemDefaults() {
return $this->createAjaxUrl(array(
'settings/itemDefaults'
));
}
/**
* @param string $generatorName
*
* @return string
*/
public function getUrlSettingsGenerator($generatorName) {
return $this->createUrl(array(
'settings/generatorconfigure',
array(
'group' => $generatorName
)
));
}
public function getAjaxUrlSettingsGenerator($generatorName) {
return $this->createAjaxUrl(array(
'settings/generatorconfigure',
array(
'group' => $generatorName
)
));
}
/**
*
* @return string
*/
public function getUrlHelp() {
return $this->createUrl(array(
'help/index'
));
}
/**
*
* @return string
*/
public function getUrlHelpBrowserIncompatible() {
return $this->createUrl(array(
'help/browserincompatible'
));
}
/**
*
* @return string
*/
public function getUrlHelpTestApi() {
return $this->createUrl(array(
'help/testApi'
));
}
/**
*
* @return string
*/
public function getUrlHelpCurl() {
return $this->createUrl(array(
'help/index',
array(
'curl' => 1
)
));
}
public function getUrlUpdateDownload() {
return $this->createUrl(array(
'update/update'
), true);
}
public function getUrlDeauthorizeLicense() {
return $this->createUrl(array('license/deauthorize'),
true);
}
public function getAjaxUrlLicenseAdd() {
return $this->createAjaxUrl(array(
'license/add'
));
}
public function getAjaxUrlImage() {
return $this->createAjaxUrl(array(
'image/index'
));
}
public function getAjaxUrlBrowse() {
return $this->createAjaxUrl(array(
'browse/index'
));
}
public function getAjaxUrlContentSearchContent() {
return $this->createAjaxUrl(array(
'content/searchcontent'
));
}
public function getAjaxUrlSubscribed() {
return $this->createAjaxUrl(array(
'settings/subscribed'
));
}
}PK9e�[�o����-Application/Admin/Update/ControllerUpdate.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Update;
use Nextend\SmartSlider3\Application\Admin\AbstractControllerAdmin;
class ControllerUpdate extends AbstractControllerAdmin {
public function actionUpdate() {
if ($this->validateToken()) {
header('LOCATION: ' .
\JRoute::_('index.php?option=com_installer&view=update',
false));
exit;
}
$this->redirectToSliders();
}
}PK9e�[��
�
/Application/Admin/Visuals/ControllerAjaxCss.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Admin\Visuals;
use Nextend\Framework\Controller\Admin\AdminAjaxController;
use Nextend\Framework\Notification\Notification;
use Nextend\Framework\Request\Request;
use Nextend\Framework\Style\ModelCss;
class ControllerAjaxCss extends AdminAjaxController {
public function getModel() {
return new ModelCss($this);
}
public function actionLoadVisuals() {
$this->validateToken();
$type = Request::$REQUEST->getCmd('type');
$this->validateVariable(!empty($type), 'type');
$model = $this->getModel();
$visuals = $model->getVisuals($type);
if (is_array($visuals)) {
$this->response->respond(array(
'visuals' => $visuals
));
}
Notification::error(n2_('Unexpected error'));
$this->response->error();
}
public function actionAddVisual() {
$this->validateToken();
$this->validatePermission('smartslider_edit');
$type = Request::$REQUEST->getCmd('type');
$this->validateVariable(!empty($type), 'type');
$model = $this->getModel();
if (($visual = $model->addVisual($type,
Request::$REQUEST->getVar('value')))) {
$this->response->respond(array(
'visual' => $visual
));
}
Notification::error(n2_('Not editable'));
$this->response->error();
}
public function actionDeleteVisual() {
$this->validateToken();
$this->validatePermission('smartslider_delete');
$type = Request::$REQUEST->getCmd('type');
$this->validateVariable(!empty($type), 'type');
$visualId = Request::$REQUEST->getInt('visualId');
$this->validateVariable($visualId > 0, 'visual');
$model = $this->getModel();
if (($visual = $model->deleteVisual($type, $visualId))) {
$this->response->respond(array(
'visual' => $visual
));
}
Notification::error(n2_('Not editable'));
$this->response->error();
}
public function actionChangeVisual() {
$this->validateToken();
$this->validatePermission('smartslider_edit');
$type = Request::$REQUEST->getCmd('type');
$this->validateVariable(!empty($type), 'type');
$visualId = Request::$REQUEST->getInt('visualId');
$this->validateVariable($visualId > 0, 'visual');
$model = $this->getModel();
if (($visual = $model->changeVisual($type, $visualId,
Request::$REQUEST->getVar('value')))) {
$this->response->respond(array(
'visual' => $visual
));
}
Notification::error(n2_('Unexpected error'));
$this->response->error();
}
}PK9e�[e�u8##'Application/ApplicationSmartSlider3.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application;
use Exception;
use Nextend\Framework\Application\AbstractApplication;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\Platform\Platform;
use Nextend\SmartSlider3\Application\Admin\ApplicationTypeAdmin;
use Nextend\SmartSlider3\Application\Frontend\ApplicationTypeFrontend;
class ApplicationSmartSlider3 extends AbstractApplication {
protected $key = 'ss3';
/** @var ApplicationTypeAdmin */
protected $applicationTypeAdmin;
/** @var ApplicationTypeFrontend */
protected $applicationTypeFrontend;
/**
* @throws Exception
*/
protected function init() {
parent::init();
$this->applicationTypeAdmin = new
ApplicationTypeAdmin($this);
$this->applicationTypeFrontend = new
ApplicationTypeFrontend($this);
}
/**
* @return ApplicationTypeAdmin
*/
public function getApplicationTypeAdmin() {
return $this->applicationTypeAdmin;
}
/**
* @return ApplicationTypeFrontend
*/
public function getApplicationTypeFrontend() {
return $this->applicationTypeFrontend;
}
public function enqueueAssets() {
if (Platform::isAdmin()) {
Js::addGlobalInline('window.N2SSPRO=' . N2SSPRO .
';');
}
}
}PK9e�[�����0Application/Frontend/ApplicationTypeFrontend.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Frontend;
use Nextend\Framework\Application\AbstractApplicationType;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use
Nextend\SmartSlider3\Application\Frontend\Slider\ControllerPreRenderSlider;
use Nextend\SmartSlider3\Application\Frontend\Slider\ControllerSlider;
class ApplicationTypeFrontend extends AbstractApplicationType {
protected $key = 'frontend';
public function __construct($application) {
ResourceTranslator::createResource('$system$',
self::getAssetsPath(), self::getAssetsUri());
parent::__construct($application);
}
protected function getControllerSlider() {
return new ControllerSlider($this);
}
protected function getControllerPreRenderSlider() {
return new ControllerPreRenderSlider($this);
}
protected function getDefaultController($controllerName, $ajax = false)
{
// TODO: Implement getDefaultController() method.
}
}PK9e�[����9Application/Frontend/Slider/ControllerPreRenderSlider.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Frontend\Slider;
use Nextend\Framework\Asset\Css\Css;
use Nextend\Framework\Controller\AbstractController;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
class ControllerPreRenderSlider extends AbstractController {
public function actionIframe() {
$sliderIDorAlias = isset($_GET['sliderid']) ?
$_GET['sliderid'] : false;
if (empty($sliderIDorAlias)) {
echo 'Slider ID or alias is empty.';
}
Css::addStaticGroup(ResourceTranslator::toPath('$ss3-frontend$/dist/normalize.min.css'),
'normalize');
$view = new ViewIframe($this);
$view->setSliderIDorAlias($sliderIDorAlias);
$view->display();
}
}PK9e�[�aO݃�0Application/Frontend/Slider/ControllerSlider.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Frontend\Slider;
use Nextend\Framework\Controller\AbstractController;
class ControllerSlider extends AbstractController {
public function actionDisplay($sliderID, $usage) {
$view = new ViewDisplay($this);
$view->setSliderIDorAlias($sliderID);
$view->setUsage($usage);
$view->display();
}
}PK9e�[cb���/Application/Frontend/Slider/Template/Iframe.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Frontend\Slider;
use Nextend\Framework\Asset\AssetManager;
use Nextend\SmartSlider3\Settings;
use Nextend\WordPress\OutputBuffer;
/**
* @var ViewIframe $this
*/
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="robots" content="noindex">
<title>Slider</title>
<style>
html, body {
overflow: hidden;
}
body * {
background-attachment: scroll !important;
}
</style>
<?php
/**
* In page builder -> editors, we must force sliders to be visible
on every device.
*/
if (isset($_GET['iseditor']) &&
$_GET['iseditor']):
?>
<script>
window.ssOverrideHideOn = {
desktopLandscape: 0,
desktopPortrait: 0,
tabletLandscape: 0,
tabletPortrait: 0,
mobileLandscape: 0,
mobilePortrait: 0
};
</script>
<?php
endif;
?>
<?php
$handlers = ob_list_handlers();
if (!in_array(OutputBuffer::class . '::outputCallback',
$handlers)) {
if
(class_exists('\\Nextend\\Framework\\Asset\\AssetManager',
false)) {
echo AssetManager::getCSS();
echo AssetManager::getJs();
}
}
$externals = Settings::get('external-css-files');
if (!empty($externals)) {
$externals = explode("\n", $externals);
foreach ($externals as $external) {
echo "<link rel='stylesheet'
href='" . $external . "' type='text/css'
media='all' />";
}
}
?>
</head>
<body>
<?php
echo $this->getSliderHTML();
?>
<script>
_N2.r('windowLoad', function () {
if (window.n2ss) {
var body = document.body,
options = {
forceFullWidth: 0,
fullPage: 0,
focusOffsetTop: '',
focusOffsetBottom: '',
margin: 0,
height: 0
},
setOption = function (name, value) {
if (options[name] != value) {
options[name] = value;
parent.postMessage({
key: 'option',
name: name,
value: value
}, "*");
}
},
sliders = [],
promise = new Promise(function (resolve) {
var checkSliders = function () {
if (Object.keys(n2ss.sliders).length) {
initSliders();
} else {
setTimeout(checkSliders, 16);
}
},
initSliders = function () {
var promises = [];
for (var k in n2ss.sliders) {
promises.push(new Promise(function
(resolve) {
n2ss.ready(k, (function (slider) {
sliders.push(slider);
resolve();
}).bind(this));
}));
}
Promise.all(promises).then(resolve);
};
checkSliders();
});
promise.then(function () {
if (sliders.length === 1) {
var sliderElement = sliders[0].sliderElement,
marginElement =
sliderElement.closest('.n2-ss-margin');
if (marginElement) {
var cs = window.getComputedStyle(marginElement);
setOption('margin', [cs.marginTop,
cs.marginRight, cs.marginBottom, cs.marginLeft].join(' '));
marginElement.style.margin = '0';
}
}
for (var i = 0; i < sliders.length; i++) {
var slider = sliders[i];
slider.stages.done('ResizeFirst', (function
(slider) {
if
(slider.sliderElement.closest('ss3-force-full-width')) {
setOption('forceFullWidth', true);
}
if (slider.responsive.parameters.type ===
'fullpage') {
setOption('fullPage', true);
}
if (sliders.length === 1) {
setOption('focusOffsetTop',
slider.responsive.parameters.focus.offsetTop);
setOption('focusOffsetBottom',
slider.responsive.parameters.focus.offsetBottom);
}
}).bind(this, slider));
slider.stages.done('HasDimension', function
() {
document.querySelectorAll('a:not([target="_parent"]):not([target="_blank"])').forEach(function
(a) {
a.target = '_parent';
});
});
}
var observer = new ResizeObserver((function (entries) {
setOption('height',
entries[0].contentRect.height);
}).bind(this));
observer.observe(body);
});
var interval = setInterval(function () {
parent.postMessage({key: 'ready'},
"*");
}, 40);
window.addEventListener("message", function (e) {
var data = e.data;
switch (data["key"]) {
case "ackReady":
window.n2Height = data.windowInnerHeight;
window.n2OffsetTop = 0;
window.n2OffsetBottom = 0;
clearInterval(interval);
document.body.style.setProperty('--target-height',
window.n2Height + 'px');
break;
case 'fullpage':
window.n2Height = data.height;
window.n2OffsetTop = data.offsetTop;
window.n2OffsetBottom = data.offsetBottom;
document.body.style.setProperty('--target-height',
window.n2Height + 'px');
window.dispatchEvent(new
Event('resize'));
break;
}
});
n2const.setLocation = function (l) {
parent.postMessage({
key: 'setLocation',
location: l
}, "*");
};
}
});
</script>
</body>
</html>
PK9e�[=Ȫ��+Application/Frontend/Slider/ViewDisplay.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Frontend\Slider;
use Nextend\Framework\View\AbstractView;
use Nextend\SmartSlider3\SliderManager\SliderManager;
class ViewDisplay extends AbstractView {
/** @var string|integer */
protected $sliderIDorAlias;
/** @var string */
protected $usage;
public function display() {
$this->getApplicationType()
->enqueueAssets();
$locale = setlocale(LC_NUMERIC, 0);
setlocale(LC_NUMERIC, "C");
$sliderManager = new SliderManager($this,
$this->sliderIDorAlias, false);
$sliderManager->setUsage($this->usage);
echo $sliderManager->render(true);
setlocale(LC_NUMERIC, $locale);
}
/**
* @return string|integer
*/
public function getSliderIDorAlias() {
return $this->sliderIDorAlias;
}
/**
* @param string|integer $sliderIDorAlias
*/
public function setSliderIDorAlias($sliderIDorAlias) {
$this->sliderIDorAlias = $sliderIDorAlias;
}
/**
* @return string
*/
public function getUsage() {
return $this->usage;
}
/**
* @param string $usage
*/
public function setUsage($usage) {
$this->usage = $usage;
}
}PK9e�[�}�V��*Application/Frontend/Slider/ViewIframe.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Frontend\Slider;
use Nextend\Framework\View\AbstractView;
use Nextend\SmartSlider3\SliderManager\SliderManager;
class ViewIframe extends AbstractView {
/** @var string|integer */
protected $sliderIDorAlias;
/**
* @var integer
*/
protected $sliderID;
protected $isGroup = false;
protected $sliderHTML = '';
public function display() {
$this->getApplicationType()
->enqueueAssets();
$locale = setlocale(LC_NUMERIC, 0);
setlocale(LC_NUMERIC, "C");
$sliderManager = new SliderManager($this,
$this->sliderIDorAlias, false);
$sliderManager->setUsage('iframe');
$this->sliderHTML = $sliderManager->render(true);
$slider = $sliderManager->getSlider();
if ($slider) {
$this->sliderID = $slider->sliderId;
$this->isGroup = $slider->isGroup();
}
setlocale(LC_NUMERIC, $locale);
echo $this->render('Iframe');
}
/**
* @return string|integer
*/
public function getSliderIDorAlias() {
return $this->sliderIDorAlias;
}
/**
* @param string|integer $sliderIDorAlias
*/
public function setSliderIDorAlias($sliderIDorAlias) {
$this->sliderIDorAlias = $sliderIDorAlias;
}
/**
* @return string
*/
public function getSliderHTML() {
return $this->sliderHTML;
}
/**
* @return int
*/
public function getSliderID() {
return $this->sliderID;
}
/**
* @return bool
*/
public function isGroup() {
return $this->isGroup;
}
}PK9e�[��jj*Application/Helper/HelperSliderChanged.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Helper;
use Nextend\Framework\Data\Data;
use Nextend\Framework\Model\ApplicationSection;
use Nextend\Framework\Model\StorageSectionManager;
use Nextend\Framework\Pattern\MVCHelperTrait;
use Nextend\SmartSlider3\Application\Model\ModelSliders;
use Nextend\SmartSlider3\Application\Model\ModelSlidersXRef;
use WP_Post;
class HelperSliderChanged {
use MVCHelperTrait;
/** @var ApplicationSection */
protected $storage;
/**
* HelperSliderChanged constructor.
*
* @param MVCHelperTrait $MVCHelper
*/
public function __construct($MVCHelper) {
$this->setMVCHelper($MVCHelper);
$this->storage =
StorageSectionManager::getStorage('smartslider');
}
public function isSliderChanged($sliderId, $value = 1) {
return intval($this->storage->get('sliderChanged',
$sliderId, $value));
}
public function setSliderChanged($sliderId, $value = 1) {
$this->storage->set('sliderChanged', $sliderId,
$value);
$changedSliders = array($sliderId);
$xref = new ModelSlidersXRef($this);
foreach ($xref->getGroups($sliderId) as $row) {
if ($row['group_id'] > 0) {
$this->storage->set('sliderChanged',
$row['group_id'], $value);
$changedSliders[] = $row['group_id'];
}
}
}
}PK9e�[�5a\�M�M$Application/Model/ModelGenerator.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Model;
use Exception;
use Nextend\Framework\Data\Data;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\ContainerInterface;
use Nextend\Framework\Form\Element\Button\ButtonRecordViewer;
use Nextend\Framework\Form\Element\Text\Number;
use Nextend\Framework\Misc\Base64;
use Nextend\Framework\Model\AbstractModelTable;
use Nextend\SmartSlider3\Generator\AbstractGeneratorGroup;
use Nextend\SmartSlider3\Generator\GeneratorFactory;
use Nextend\SmartSlider3\SlideBuilder\BuilderComponentCol;
use Nextend\SmartSlider3\SlideBuilder\BuilderComponentLayer;
use Nextend\SmartSlider3\SlideBuilder\BuilderComponentRow;
use Nextend\SmartSlider3\SlideBuilder\BuilderComponentSlide;
class ModelGenerator extends AbstractModelTable {
protected function createConnectorTable() {
return
Database::getTable('nextend2_smartslider3_generators');
}
private static function getLayout($type) {
$slideBuilder = new BuilderComponentSlide();
switch ($type) {
case 'image':
$slideBuilder->set(array(
'title' => "{title}",
'thumbnail' =>
"{thumbnail}",
'backgroundImage' => "{image}",
'background-type' => 'image'
));
break;
case 'image_extended':
$slideBuilder->set(array(
'title' => "{title}",
'thumbnail' =>
"{thumbnail}",
'backgroundImage' => "{image}",
'background-type' => 'image'
));
$slideBuilder->content->set(array(
'verticalalign' =>
'flex-end',
'desktopportraitpadding' =>
'0|*|0|*|0|*|0|*|px'
));
$row = new BuilderComponentRow($slideBuilder->content);
$row->set(array(
'bgcolor' => '00000080',
));
$col = new BuilderComponentCol($row, '1');
$col->set(array(
'desktopportraitinneralign' =>
"left"
));
$heading = new BuilderComponentLayer($col,
'heading');
$heading->set(array(
'desktopportraitselfalign' =>
'inherit'
));
$heading->item->set(array(
'heading' => '{title/1}',
));
break;
case 'article':
$slideBuilder->set(array(
'title' => "{title}",
'description' =>
'{description}',
'href' => '{url}',
'thumbnail' =>
"{thumbnail}",
'backgroundImage' => "{image}",
'background-type' => 'image'
));
$slideBuilder->content->set(array(
'verticalalign' =>
'flex-end',
'desktopportraitpadding' =>
'0|*|0|*|0|*|0|*|px',
));
$row = new BuilderComponentRow($slideBuilder->content);
$row->set(array(
'bgcolor' => '00000080',
));
$col = new BuilderComponentCol($row, '1');
$col->set(array(
'desktopportraitinneralign' =>
"left",
));
$heading = new BuilderComponentLayer($col,
'heading');
$heading->set(array(
'desktopportraitselfalign' =>
'inherit'
));
$heading->item->set(array(
'heading' => '{title}',
'font' =>
Base64::encode('{"data":[{"extra":"","color":"ffffffff","size":"36||px","tshadow":"0|*|0|*|0|*|000000ff","afont":"Roboto,Arial","lineheight":"1.5","bold":0,"italic":0,"underline":0,"align":"inherit","letterspacing":"normal","wordspacing":"normal","texttransform":"none"},{"extra":""}]}')
));
break;
case 'product':
$slideBuilder->set(array(
'title' => "{title}",
'description' =>
'{description}',
'href' => '{url}',
'thumbnail' =>
"{thumbnail}",
'backgroundImage' => "{image}",
'background-type' => 'image'
));
$slideBuilder->content->set(array(
'verticalalign' =>
'flex-end',
'desktopportraitpadding' =>
'0|*|0|*|0|*|0|*|px',
));
$row = new BuilderComponentRow($slideBuilder->content);
$row->set(array(
'bgcolor' => '00000080',
));
$col = new BuilderComponentCol($row, '1/2');
$col->set(array(
'desktopportraitinneralign' =>
"left",
));
$heading = new BuilderComponentLayer($col,
'heading');
$heading->set(array(
'desktopportraitselfalign' =>
'inherit'
));
$heading->item->set(array(
'heading' => '{title}',
'font' =>
Base64::encode('{"data":[{"extra":"","color":"ffffffff","size":"36||px","tshadow":"0|*|0|*|0|*|000000ff","afont":"Roboto,Arial","lineheight":"1.5","bold":0,"italic":0,"underline":0,"align":"inherit","letterspacing":"normal","wordspacing":"normal","texttransform":"none"},{"extra":""}]}'),
));
$col2 = new BuilderComponentCol($row, '1/2');
$col2->set(array(
'desktopportraitinneralign' =>
"right",
));
$text = new BuilderComponentLayer($col2, 'text');
$text->set(array(
'desktopportraitselfalign' =>
'inherit'
));
$text->item->set(array(
'content' => '{price}',
'font' =>
Base64::encode('{"data":[{"extra":"","color":"ffffffff","size":"36||px","tshadow":"0|*|0|*|0|*|000000ff","afont":"Roboto,Arial","lineheight":"1.5","bold":0,"italic":0,"underline":0,"align":"inherit","letterspacing":"normal","wordspacing":"normal","texttransform":"none"},{"extra":""}]}'),
));
break;
case 'event':
$slideBuilder->set(array(
'title' => "{title}",
'description' =>
'{description}',
'href' => '{url}',
'thumbnail' =>
"{thumbnail}",
'backgroundImage' => "{image}",
'background-type' => 'image'
));
$slideBuilder->content->set(array(
'verticalalign' =>
'flex-end',
'desktopportraitpadding' =>
'0|*|0|*|0|*|0|*|px',
));
$row = new BuilderComponentRow($slideBuilder->content);
$row->set(array(
'bgcolor' => '00000080',
));
$col = new BuilderComponentCol($row, '1/2');
$col->set(array(
'desktopportraitinneralign' =>
"left",
));
$heading = new BuilderComponentLayer($col,
'heading');
$heading->set(array(
'desktopportraitselfalign' =>
'inherit'
));
$heading->item->set(array(
'heading' => '{title}',
'font' =>
Base64::encode('{"data":[{"extra":"","color":"ffffffff","size":"36||px","tshadow":"0|*|0|*|0|*|000000ff","afont":"Roboto,Arial","lineheight":"1.5","bold":0,"italic":0,"underline":0,"align":"inherit","letterspacing":"normal","wordspacing":"normal","texttransform":"none"},{"extra":""}]}'),
));
$col2 = new BuilderComponentCol($row, '1/2');
$col2->set(array(
'desktopportraitinneralign' =>
"right",
));
$heading = new BuilderComponentLayer($col2,
'heading');
$heading->set(array(
'desktopportraitselfalign' =>
'inherit'
));
$heading->item->set(array(
'heading' => '{start_date}',
'font' =>
Base64::encode('{"data":[{"extra":"","color":"ffffffff","size":"36||px","tshadow":"0|*|0|*|0|*|000000ff","afont":"Roboto,Arial","lineheight":"1.5","bold":0,"italic":0,"underline":0,"align":"inherit","letterspacing":"normal","wordspacing":"normal","texttransform":"none"},{"extra":""}]}'),
));
break;
case 'youtube':
$slideBuilder->set(array(
'title' => "{title}",
'description' =>
'{description}',
'href' => '{url}',
'thumbnail' =>
"{thumbnail}",
'backgroundColor' => "ffffff00",
'background-type' => 'color',
));
$youtube = new BuilderComponentLayer($slideBuilder,
'youtube');
$youtube->set(array(
'desktopportraitwidth' =>
'100%',
'desktopportraitheight' =>
'100%',
'desktopportraitalign' =>
'left',
'desktopportraitvalign' => 'top'
));
$youtube->item->set(array(
"youtubeurl" => "{video_url}",
));
break;
case 'vimeo':
$slideBuilder->set(array(
'title' => "{title}",
'description' =>
'{description}',
'href' => '{url}',
'thumbnail' =>
"{image200x150/1}",
'backgroundColor' => "ffffff00",
'background-type' => 'color',
));
$vimeo = new BuilderComponentLayer($slideBuilder,
'vimeo');
$vimeo->set(array(
'desktopportraitwidth' =>
'100%',
'desktopportraitheight' =>
'100%',
'desktopportraitalign' =>
'left',
'desktopportraitvalign' => 'top'
));
$vimeo->item->set(array(
"vimeourl" => "{url}",
'image' => ''
));
break;
case 'social_post':
$slideBuilder->set(array(
'title' => "{title}",
'description' =>
'{description}',
'href' => '{url}',
'thumbnail' =>
"{author_image}",
'backgroundColor' => "ffffff00",
'background-type' => 'color',
));
$slideBuilder->content->set(array(
'verticalalign' =>
'center',
'desktopportraitpadding' =>
'0|*|0|*|0|*|0|*|px',
'desktopportraitmargin' =>
'0|*|0|*|0|*|0|*|px'
));
$row = new BuilderComponentRow($slideBuilder->content);
$row->set(array(
'bgcolor' =>
'00000080',
'desktopportraitpadding' =>
'10|*|10|*|10|*|10|*|px',
'desktopportraitmargin' =>
'0|*|0|*|0|*|0|*|px'
));
$col = new BuilderComponentCol($row, '1');
$col->set(array(
'desktopportraitinneralign' =>
"left",
'desktopportraitmargin' =>
'0|*|0|*|0|*|0|*|px',
'desktopportraitpadding' =>
'10|*|10|*|10|*|10|*|px'
));
$heading = new BuilderComponentLayer($col,
'heading');
$heading->set(array(
'desktopportraitmargin' =>
'0|*|0|*|0|*|0|*|px',
'desktopportraitselfalign' =>
'inherit'
));
$heading->item->set(array(
'heading' => '{message}',
));
$image = new BuilderComponentLayer($col,
'image');
$image->set(array(
'desktopportraitmargin' =>
'0|*|0|*|0|*|0|*|px',
'desktopportraitselfalign' =>
'inherit'
));
$image->item->set(array(
'image' => '{author_image}',
));
$button = new BuilderComponentLayer($col,
'button');
$button->set(array(
'desktopportraitmargin' =>
'0|*|0|*|0|*|0|*|px',
'desktopportraitselfalign' =>
'inherit'
));
$button->item->set(array(
'content' => '{url_label}',
));
break;
case 'text':
$slideBuilder->set(array(
'title' => "{title}"
));
$slideBuilder->content->set(array(
'verticalalign' =>
'flex-end',
'desktopportraitpadding' =>
'0|*|0|*|0|*|0|*|px',
));
$row = new BuilderComponentRow($slideBuilder->content);
$row->set(array(
'bgcolor' => '00000080',
));
$col = new BuilderComponentCol($row, '1');
$col->set(array(
'desktopportraitinneralign' =>
"left",
));
$heading = new BuilderComponentLayer($col,
'heading');
$heading->set(array(
'desktopportraitselfalign' =>
'inherit'
));
$heading->item->set(array(
'heading' => '{title}',
'font' =>
Base64::encode('{"data":[{"extra":"","color":"ffffffff","size":"36||px","tshadow":"0|*|0|*|0|*|000000ff","afont":"Roboto,Arial","lineheight":"1.5","bold":0,"italic":0,"underline":0,"align":"inherit","letterspacing":"normal","wordspacing":"normal","texttransform":"none"},{"extra":""}]}')
));
break;
break;
case 'text_generator':
$slideBuilder->set(array(
'title' => "{variable1}"
));
$slideBuilder->content->set(array(
'verticalalign' =>
'flex-end',
'desktopportraitpadding' =>
'0|*|0|*|0|*|0|*|px',
));
$row = new BuilderComponentRow($slideBuilder->content);
$row->set(array(
'bgcolor' => '00000080',
));
$col = new BuilderComponentCol($row, '1');
$col->set(array(
'desktopportraitinneralign' =>
"left",
));
$heading = new BuilderComponentLayer($col,
'heading');
$heading->set(array(
'desktopportraitselfalign' =>
'inherit'
));
$heading->item->set(array(
'heading' => '{variable1}',
'font' =>
Base64::encode('{"data":[{"extra":"","color":"ffffffff","size":"36||px","tshadow":"0|*|0|*|0|*|000000ff","afont":"Roboto,Arial","lineheight":"1.5","bold":0,"italic":0,"underline":0,"align":"inherit","letterspacing":"normal","wordspacing":"normal","texttransform":"none"},{"extra":""}]}')
));
break;
default:
return $slideBuilder->set(array(
'title' => "title",
'description' => '',
'backgroundColor' => "ffffff00",
'background-type' => 'color',
));
}
return $slideBuilder->getData();
}
public function createGenerator($sliderId, $params) {
$data = new Data($params);
unset($params['type']);
unset($params['group']);
unset($params['record-slides']);
try {
$generatorId =
$this->_create($data->get('type'),
$data->get('group'), json_encode($params));
$source =
$this->getGeneratorGroup($data->get('group'))
->getSource($data->get('type'));
$slideData = self::getLayout($source->getLayout());
$slideData['record-slides'] =
intval($data->get('record-slides', 5));
$slidesModel = new ModelSlides($this);
$slideId =
$slidesModel->createSlideWithGenerator($sliderId, $generatorId,
$slideData);
return array(
'slideId' => $slideId,
'generatorId' => $generatorId
);
} catch (Exception $e) {
throw new Exception($e->getMessage());
}
}
/**
* @param ContainerInterface $container
*/
public function renderFields($container) {
$settings = new ContainerTable($container, 'generator',
n2_('Generator settings'));
$generatorRow = $settings->createRow('generator-row');
new Number($generatorRow, 'record-slides',
n2_('Slides'), 5, array(
'unit' => n2_x('slides',
'Unit'),
'wide' => 3,
));
new Number($generatorRow, 'cache-expiration',
n2_('Cache expiration'), 24, array(
'wide' => 3,
'unit' => n2_('hours')
));
new Number($generatorRow, 'record-start', n2_('Start
index'), 1, array(
'wide' => 3
));
new Number($generatorRow, 'record-group', n2_('Group
result'), 1, array(
'wide' => 3
));
new ButtonRecordViewer($generatorRow, 'record-viewer');
}
/**
* @param $type
*
* @return AbstractGeneratorGroup
*/
public function getGeneratorGroup($type) {
return GeneratorFactory::getGenerator($type);
}
public function get($id) {
return Database::queryRow("SELECT * FROM " .
$this->getTableName() . " WHERE id = :id", array(
":id" => $id
));
}
public function import($generator) {
$this->table->insert(array(
'type' => $generator['type'],
'group' => $generator['group'],
'params' => $generator['params']
));
return $this->table->insertId();
}
private function _create($type, $group, $params) {
$this->table->insert(array(
'type' => $type,
'group' => $group,
'params' => $params
));
return $this->table->insertId();
}
public function save($generatorId, $params) {
$this->table->update(array(
'params' => json_encode($params)
), array('id' => $generatorId));
return $generatorId;
}
public function delete($id) {
$this->table->deleteByAttributes(array(
"id" => intval($id)
));
}
public function duplicate($id) {
$generatorRow = $this->get($id);
$generatorId = $this->_create($generatorRow['type'],
$generatorRow['group'], $generatorRow['params']);
return $generatorId;
}
public function getSliderId($generatorId) {
$slidesModal = new ModelSlides($this);
$slideData = Database::queryRow("SELECT slider FROM " .
$slidesModal->getTableName() . " WHERE generator_id = :id",
array(
":id" => $generatorId
));
return $slideData['slider'];
}
}PK9e�[1 'LL"Application/Model/ModelLicense.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Model;
use Nextend\Framework\Model\StorageSectionManager;
use Nextend\Framework\Notification\Notification;
use Nextend\Framework\Pattern\SingletonTrait;
use Nextend\SmartSlider3\SmartSlider3Info;
/**
* Class ModelLicense
*
* @package Nextend\SmartSlider3\Application\Model
*
*/
class ModelLicense {
use SingletonTrait;
private $key;
public function __construct() {
if (defined('SMART_SLIDER_LICENSE')) {
$this->key = SMART_SLIDER_LICENSE;
} else {
$this->key =
StorageSectionManager::getStorage('smartslider')
->get('license',
'key');
}
}
public function hasKey() {
return true;//mhehm
return !empty($this->key);
}
public function maybeActiveLazy() {
$lastActive =
StorageSectionManager::getStorage('smartslider')
->get('license',
'isActive');
return $lastActive > 0;
}
public function maybeActive() {
$lastActive =
StorageSectionManager::getStorage('smartslider')
->get('license',
'isActive');
if ($lastActive && $lastActive > strtotime("-1
week")) {
return true;
}
return false;
}
public function getKey() {
return '12345678901234567890123456789012345678901234';//mhehm
return $this->key;
}
public function setKey($licenseKey) {
StorageSectionManager::getStorage('smartslider')
->set('license', 'key',
$licenseKey);
StorageSectionManager::getStorage('smartslider')
->set('license',
'isActive', time());
if ($licenseKey == '') {
StorageSectionManager::getStorage('smartslider')
->set('license',
'isActive', '0');
}
$this->key = $licenseKey;
}
public function checkKey($license, $action = 'licensecheck')
{
$result = SmartSlider3Info::api(array(
'action' => $action,
'license' => $license
));
if ($result === false) {
return 'CONNECTION_ERROR';
}
$result['status'] = 'OK';//mhehm
return $result['status'];
}
public function isActive($cacheAccepted = true) {
if ($cacheAccepted && $this->maybeActive()) {
return 'OK';
}
$status = $this->checkKey($this->key);
if ($this->hasKey() && $status == 'OK') {
StorageSectionManager::getStorage('smartslider')
->set('license',
'isActive', time());
return $status;
}
StorageSectionManager::getStorage('smartslider')
->set('license',
'isActive', '0');
return $status;
}
public function deAuthorize() {
if ($this->hasKey()) {
$this->setKey('');
Notification::notice(n2_('Smart Slider 3 deactivated on
this site!'));
return 'OK';
}
return false;
}
}PK9e�[-}��#Application/Model/ModelSettings.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Model;
use Nextend\Framework\Model\AbstractModel;
use Nextend\Framework\Model\Section;
use Nextend\Framework\Request\Request;
use Nextend\SmartSlider3\Application\Helper\HelperSliderChanged;
use Nextend\SmartSlider3\Settings;
class ModelSettings extends AbstractModel {
public function save() {
$namespace = Request::$REQUEST->getCmd('namespace',
'default');
$settings = Request::$REQUEST->getVar('settings');
if ($namespace && $settings) {
if ($namespace == 'default') $namespace =
'settings';
if ($namespace == 'font' &&
Request::$REQUEST->getInt('sliderid')) {
$namespace .=
Request::$REQUEST->getInt('sliderid');
$helper = new HelperSliderChanged($this);
$helper->setSliderChanged(Request::$REQUEST->getInt('sliderid'),
1);
}
Settings::store($namespace, json_encode($settings));
}
return true;
}
public function saveDefaults($defaults) {
if (!empty($defaults)) {
foreach ($defaults AS $referenceKey => $value) {
Section::set('smartslider', 'default',
$referenceKey, $value);
}
}
return true;
}
}PK9e�[>a36T6T"Application/Model/ModelSliders.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Model;
use Exception;
use Nextend\Framework\Cache\AbstractCache;
use Nextend\Framework\Data\Data;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Model\AbstractModelTable;
use Nextend\Framework\Notification\Notification;
use Nextend\Framework\Platform\Platform;
use Nextend\SmartSlider3\Application\Helper\HelperSliderChanged;
use Nextend\SmartSlider3\Slider\Admin\AdminSlider;
use Nextend\SmartSlider3\Slider\Slider;
use Nextend\SmartSlider3\SmartSlider3Info;
class ModelSliders extends AbstractModelTable {
/**
* @var ModelSlidersXRef
*/
private $xref;
protected function createConnectorTable() {
$this->xref = new ModelSlidersXRef($this);
return
Database::getTable('nextend2_smartslider3_sliders');
}
public function get($id) {
return Database::queryRow("SELECT * FROM " .
$this->getTableName() . " WHERE id = :id", array(
":id" => $id
));
}
public function getByAlias($alias) {
return Database::queryRow("SELECT id FROM " .
$this->getTableName() . " WHERE alias = :alias", array(
":alias" => $alias
));
}
public function getWithThumbnail($id) {
$slidesModel = new ModelSlides($this);
return Database::queryRow("SELECT sliders.*,
IF(sliders.thumbnail != '',sliders.thumbnail,(SELECT
slides.thumbnail from " . $slidesModel->getTableName() . " AS
slides WHERE slides.slider = sliders.id AND slides.published = 1 AND
slides.generator_id = 0 AND slides.thumbnail NOT LIKE '' ORDER BY
slides.first DESC, slides.ordering ASC LIMIT 1)) AS thumbnail,
IF(sliders.type != 'group',
(SELECT count(*) FROM " .
$slidesModel->getTableName() . " AS slides2 WHERE slides2.slider =
sliders.id GROUP BY slides2.slider),
(SELECT count(*) FROM " .
$this->xref->getTableName() . " AS xref2 WHERE xref2.group_id =
sliders.id GROUP BY xref2.group_id)
) AS slides
FROM " . $this->getTableName() . " AS sliders
WHERE sliders.id = :id", array(
":id" => $id
));
}
public function invalidateCache() {
Database::query("DELETE FROM `" .
Database::parsePrefix('#__nextend2_section_storage') . "`
WHERE `application` LIKE 'cache'");
Database::query("DELETE FROM `" .
Database::parsePrefix('#__nextend2_section_storage') . "`
WHERE `application` LIKE 'smartslider' AND `section` LIKE
'sliderChanged';");
}
public function refreshCache($sliderid) {
AbstractCache::clearGroup(Slider::getCacheId($sliderid));
AbstractCache::clearGroup(AdminSlider::getCacheId($sliderid));
$this->markChanged($sliderid);
}
public function getSlidersCount() {
$data = Database::queryRow("SELECT COUNT(*) AS sliders FROM
" . $this->getTableName());
if (!empty($data)) {
return intval($data['sliders']);
}
return 0;
}
/**
* @return mixed
*/
public function getAll($groupID = '*', $status =
'*', $orderBy = 'ordering', $orderByDirection =
'ASC') {
$slidesModel = new ModelSlides($this);
if (empty($orderBy)) {
$orderBy = 'ordering';
}
if (empty($orderByDirection)) {
$orderByDirection = 'ASC';
}
$_orderby = $orderBy . ' ' . $orderByDirection;
$wheres = array();
if ($groupID !== '*') {
if ($groupID == 0) {
$wheres[] = "(xref.group_id IS NULL OR xref.group_id =
0)";
} else {
if ($orderBy == 'ordering') {
$_orderby = 'xref.' . $orderBy . '
' . $orderByDirection;
}
$wheres[] = "xref.group_id = '" . $groupID .
"'";
}
}
if ($status !== '*') {
$wheres[] = "sliders.status LIKE " .
Database::quote($status);
}
$sliders = Database::queryAll("
SELECT sliders.*,
IF(sliders.thumbnail != '',
sliders.thumbnail,
IF(sliders.type != 'group',
(SELECT slides.thumbnail FROM " .
$slidesModel->getTableName() . " AS slides WHERE slides.slider =
sliders.id AND slides.published = 1 AND slides.generator_id = 0 AND
slides.thumbnail NOT LIKE '' ORDER BY slides.first DESC,
slides.ordering ASC LIMIT 1),
''
)
) AS thumbnail,
IF(sliders.type != 'group',
(SELECT count(*) FROM " .
$slidesModel->getTableName() . " AS slides2 WHERE slides2.slider =
sliders.id GROUP BY slides2.slider),
(SELECT count(*) FROM " .
$this->xref->getTableName() . " AS xref2 LEFT JOIN " .
$this->getTableName() . " AS sliders2 ON sliders2.id =
xref2.slider_id WHERE xref2.group_id = sliders.id AND sliders2.status LIKE
'published' GROUP BY xref2.group_id)
) AS slides
FROM " . $this->getTableName() . " AS sliders
LEFT JOIN " . $this->xref->getTableName() . "
AS xref ON xref.slider_id = sliders.id
WHERE " . implode(' AND ', $wheres) . "
ORDER BY " . $_orderby);
return $sliders;
}
public function _getAll() {
return Database::queryAll("SELECT sliders.* FROM " .
$this->getTableName() . " AS sliders");
}
public function getGroups($status = '*') {
$wheres = array(
"type LIKE 'group'"
);
if ($status !== '*') {
$wheres[] = "status LIKE " .
Database::quote($status);
}
return Database::queryAll("SELECT id, title FROM " .
$this->getTableName() . " WHERE " . implode(' AND ',
$wheres) . " ORDER BY title ASC");
}
public function import($slider, $groupID = 0) {
try {
$this->table->insert(array(
'title' => $slider['title'],
'type' => $slider['type'],
'thumbnail' =>
empty($slider['thumbnail']) ? '' :
$slider['thumbnail'],
'params' =>
$slider['params']->toJSON(),
'time' => date('Y-m-d H:i:s',
Platform::getTimestamp())
));
$sliderID = $this->table->insertId();
if (isset($slider['alias'])) {
$this->updateAlias($sliderID,
$slider['alias']);
}
$this->xref->add($groupID, $sliderID);
SmartSlider3Info::sliderChanged();
return $sliderID;
} catch (Exception $e) {
throw new Exception($e->getMessage());
}
}
public function replace($slider, $groupID) {
if (isset($slider['id']) &&
$slider['id'] > 0) {
$groups =
$this->xref->getGroups($slider['id']);
$this->deletePermanently($slider['id']);
try {
$this->table->insert(array(
'id' => $slider['id'],
'title' => $slider['title'],
'type' => $slider['type'],
'thumbnail' =>
empty($slider['thumbnail']) ? '' :
$slider['thumbnail'],
'params' =>
$slider['params']->toJSON(),
'time' => date('Y-m-d
H:i:s', Platform::getTimestamp())
));
$sliderID = $this->table->insertId();
if (isset($slider['alias'])) {
$this->updateAlias($sliderID,
$slider['alias']);
}
if ($groupID) {
$this->xref->add($groupID, $sliderID);
}
if (!empty($groups)) {
foreach ($groups as $group) {
if ($groupID != $group['group_id']) {
$this->xref->add($group['group_id'], $sliderID);
}
}
}
SmartSlider3Info::sliderChanged();
return $sliderID;
} catch (Exception $e) {
throw new Exception($e->getMessage());
}
}
return $this->import($slider);
}
/**
* @param $sliderId
* @param $params Data
*/
public function importUpdate($sliderId, $params) {
$this->table->update(array(
'params' => $params->toJson()
), array(
"id" => $sliderId
));
}
public function create($slider, $groupID = 0) {
if (!isset($slider['title'])) return false;
if ($slider['title'] == '')
$slider['title'] = n2_('New slider');
$title = $slider['title'];
unset($slider['title']);
$type = $slider['type'];
unset($slider['type']);
$thumbnail = '';
if (!empty($slider['thumbnail'])) {
$thumbnail = $slider['thumbnail'];
unset($slider['thumbnail']);
}
try {
$this->table->insert(array(
'title' => $title,
'type' => $type,
'params' => json_encode($slider),
'thumbnail' => $thumbnail,
'time' => date('Y-m-d H:i:s',
Platform::getTimestamp()),
'ordering' =>
$this->getMaximalOrderValue()
));
$sliderID = $this->table->insertId();
$this->xref->add($groupID, $sliderID);
SmartSlider3Info::sliderChanged();
return $sliderID;
} catch (Exception $e) {
throw new Exception($e->getMessage());
}
}
public function saveSimple($id, $title, $params) {
if ($id <= 0) return false;
if (empty($title)) $title = n2_('New slider');
$this->table->update(array(
'title' => $title,
'params' => json_encode($params)
), array(
"id" => $id
));
}
public function save($id, $slider) {
if (!isset($slider['title']) || $id <= 0) return
false;
$response = array(
'changedFields' => array()
);
if ($slider['title'] == '')
$slider['title'] = n2_('New slider');
$title = $slider['title'];
unset($slider['title']);
$alias = $slider['alias'];
unset($slider['alias']);
$type = $slider['type'];
unset($slider['type']);
$thumbnail = '';
if (!empty($slider['thumbnail'])) {
$thumbnail = $slider['thumbnail'];
unset($slider['thumbnail']);
}
$this->table->update(array(
'title' => $title,
'type' => $type,
'params' => json_encode($slider),
'thumbnail' => $thumbnail
), array(
"id" => $id
));
$aliasResult = $this->updateAlias($id, $alias);
if ($aliasResult !== false) {
if ($aliasResult['oldAlias'] !==
$aliasResult['newAlias']) {
if ($aliasResult['newAlias'] === null) {
Notification::notice(n2_('Alias removed'));
$response['changedFields']['slideralias'] =
'';
} else if ($aliasResult['newAlias'] ===
'') {
Notification::error(n2_('Alias must contain one or
more letters'));
$response['changedFields']['slideralias'] =
'';
} else {
Notification::notice(sprintf(n2_('Alias updated
to: %s'), $aliasResult['newAlias']));
$response['changedFields']['slideralias'] =
$aliasResult['newAlias'];
}
}
}
$this->markChanged($id);
SmartSlider3Info::sliderChanged();
return $response;
}
public function updateAlias($sliderID, $alias) {
$isNull = false;
if (empty($alias)) {
$isNull = true;
} else {
$alias = strtolower($alias);
$alias = preg_replace('/&.+?;/', '',
$alias); // kill entities
$alias = str_replace('.', '-', $alias);
$alias = preg_replace('/[^%a-z0-9 _-]/',
'', $alias);
$alias = preg_replace('/\s+/', '-',
$alias);
$alias = preg_replace('|-+|', '-', $alias);
$alias = preg_replace('|^-*|', '', $alias);
if (empty($alias)) {
$isNull = true;
}
}
$slider = $this->get($sliderID);
if ($isNull) {
if ($slider['alias'] == 'null') {
} else {
Database::query('UPDATE ' .
$this->table->getTableName() . ' SET `alias` = NULL WHERE id =
' . intval($sliderID));
return array(
'oldAlias' => $slider['alias'],
'newAlias' => null
);
}
} else {
if (!is_numeric($alias)) {
if ($slider['alias'] == $alias) {
return array(
'oldAlias' =>
$slider['alias'],
'newAlias' => $alias
);
} else {
$_alias = $alias;
for ($i = 2; $i < 12; $i++) {
$sliderWithAlias = $this->getByAlias($_alias);
if (!$sliderWithAlias) {
$this->table->update(array(
'alias' => $_alias
), array(
"id" => $sliderID
));
return array(
'oldAlias' =>
$slider['alias'],
'newAlias' => $_alias
);
break;
} else {
$_alias = $alias . $i;
}
}
}
}
return array(
'oldAlias' => $slider['alias'],
'newAlias' => ''
);
}
return false;
}
public function setTitle($id, $title) {
$this->table->update(array(
'title' => $title
), array(
"id" => $id
));
$this->markChanged($id);
return $id;
}
public function setThumbnail($id, $thumbnail) {
$this->table->update(array(
'thumbnail' => $thumbnail
), array(
"id" => $id
));
$this->markChanged($id);
return $id;
}
public function changeSliderType($sliderID, $targetSliderType) {
$this->table->update(array(
'type' => $targetSliderType
), array(
"id" => $sliderID
));
$this->markChanged($sliderID);
}
/**
* @param $sliderID
* @param $groupID
*
* @return string
*/
public function trash($sliderID, $groupID) {
$relatedGroups = $this->xref->getGroups($sliderID);
if (count($relatedGroups) > 1) {
/**
* Delete the connection between the slider and the group
*/
$this->xref->deleteXref($groupID, $sliderID);
return 'unlink';
}
$this->table->update(array(
'status' => 'trash'
), array(
"id" => $sliderID
));
$helper = new HelperSliderChanged($this);
$helper->setSliderChanged($sliderID, 1);
$helper->setSliderChanged($groupID, 1);
$slider = $this->get($sliderID);
if ($slider['type'] == 'group') {
$subSliders = $this->xref->getSliders($sliderID,
'published');
foreach ($subSliders as $subSlider) {
if
(!$this->xref->isSliderAvailableInAnyGroups($subSlider['slider_id']))
{
$helper->setSliderChanged($subSlider['slider_id'], 1);
}
}
}
return 'trash';
}
public function restore($id) {
$changedSliders = array();
$helper = new HelperSliderChanged($this);
$slider = $this->get($id);
if ($slider['type'] == 'group') {
$subSliders = $this->xref->getSliders($id,
'published');
foreach ($subSliders as $subSlider) {
if
(!$this->xref->isSliderAvailableInAnyGroups($subSlider['slider_id']))
{
$changedSliders[] = $subSlider['slider_id'];
}
}
} else {
$relatedGroups = $this->xref->getGroups($id);
if ($relatedGroups &&
isset($relatedGroups[0]['group_id']) &&
$relatedGroups[0]['group_id'] > 0) {
//if a slider was trashed, then it can only be restored to
one group
$helper->setSliderChanged($relatedGroups[0]['group_id'], 1);
}
}
$this->table->update(array(
'status' => 'published'
), array(
"id" => $id
));
if (!empty($changedSliders)) {
foreach ($changedSliders as $sliderID) {
$helper->setSliderChanged($sliderID, 1);
}
}
}
/**
* @param $id
*
* @return array the IDs of the deleted sliders.
*/
public function deletePermanently($id) {
$slidesModel = new ModelSlides($this);
$slidesModel->deleteBySlider($id);
$deletedSliders = $this->xref->deleteGroup($id);
$deletedSliders[] = $id;
$this->xref->deleteSlider($id);
$this->table->deleteByPk($id);
AbstractCache::clearGroup(Slider::getCacheId($id));
AbstractCache::clearGroup(AdminSlider::getCacheId($id));
$this->markChanged($id);
SmartSlider3Info::sliderChanged();
return $deletedSliders;
}
public function trashOrDelete($id, $groupID) {
$relatedGroups = $this->xref->getGroups($id);
if (count($relatedGroups) > 1) {
/**
* Delete the connection between the slider and the group
*/
$this->xref->deleteXref($groupID, $id);
return 'unlink';
} else {
$this->deletePermanently($id);
return 'delete';
}
}
public function deleteSlides($id) {
$slidesModel = new ModelSlides($this);
$slidesModel->deleteBySlider($id);
$this->markChanged($id);
}
public function duplicate($id, $withGroup = true) {
$slider = $this->get($id);
unset($slider['id']);
$slider['title'] .= ' - ' .
n2_('Copy');
$slider['time'] = date('Y-m-d H:i:s',
Platform::getTimestamp());
/**
* Remove alias to prevent override
*/
$slider['alias'] = '';
try {
$this->table->insert($slider);
$newSliderId = $this->table->insertId();
} catch (Exception $e) {
throw new Exception($e->getMessage());
}
if (!$newSliderId) {
return false;
}
if ($slider['type'] == 'group') {
$subSliders = $this->xref->getSliders($id,
'published');
foreach ($subSliders as $subSlider) {
$newSubSliderID =
$this->duplicate($subSlider['slider_id'], false);
$this->xref->add($newSliderId, $newSubSliderID);
}
} else {
$slidesModel = new ModelSlides($this);
foreach ($slidesModel->getAll($id) as $slide) {
$slidesModel->copyTo($slide['id'], true,
$newSliderId);
}
if ($withGroup) {
$groups = $this->xref->getGroups($id);
foreach ($groups as $group) {
$this->xref->add($group['group_id'],
$newSliderId);
}
}
}
SmartSlider3Info::sliderChanged();
return $newSliderId;
}
public function markChanged($sliderid) {
$helper = new HelperSliderChanged($this);
$helper->setSliderChanged($sliderid, 1);
}
public function order($groupID, $ids, $isReverse = false) {
if (is_array($ids) && count($ids) > 0) {
if ($isReverse) {
$ids = array_reverse($ids);
}
$groupID = intval($groupID);
if ($groupID <= 0) {
$groupID = false;
}
$i = 0;
foreach ($ids as $id) {
$id = intval($id);
if ($id > 0) {
if (!$groupID) {
$this->table->update(array(
'ordering' => $i,
), array(
"id" => $id
));
} else {
$this->xref->table->update(array(
'ordering' => $i,
), array(
"slider_id" => $id,
"group_id" => $groupID
));
}
$i++;
}
}
return $i;
}
return false;
}
protected function getMaximalOrderValue() {
$query = "SELECT MAX(ordering) AS ordering FROM " .
$this->getTableName() . "";
$result = Database::queryRow($query);
if (isset($result['ordering'])) return
$result['ordering'] + 1;
return 0;
}
}PK9e�[������&Application/Model/ModelSlidersXRef.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Model;
use Exception;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Model\AbstractModelTable;
use Nextend\SmartSlider3\Application\Helper\HelperSliderChanged;
use Nextend\SmartSlider3\SmartSlider3Info;
class ModelSlidersXRef extends AbstractModelTable {
protected function createConnectorTable() {
return
Database::getTable('nextend2_smartslider3_sliders_xref');
}
public function add($groupID, $sliderID) {
try {
$this->table->insert(array(
'group_id' => $groupID,
'slider_id' => $sliderID,
'ordering' =>
$this->getMaximalOrderValue($groupID)
));
$helper = new HelperSliderChanged($this);
$helper->setSliderChanged($sliderID, 1);
$helper->setSliderChanged($groupID, 1);
SmartSlider3Info::sliderChanged();
return true;
} catch (Exception $e) {
return false;
}
}
/**
* @param int $groupID
*
* @return array the IDs of the deleted child sliders.
*/
public function deleteGroup($groupID) {
$sliders = $this->getSliders($groupID);
$deletedSliders = array();
$slidersModel = new ModelSliders($this);
foreach ($sliders as $slider) {
$relatedGroups =
$this->getGroups($slider['slider_id']);
if (count($relatedGroups) == 1) {
if
($slidersModel->trashOrDelete($slider['slider_id'], $groupID)
== 'delete') {
$deletedSliders[] = $slider['slider_id'];
}
}
}
$this->table->deleteByAttributes(array(
'group_id' => $groupID
));
SmartSlider3Info::sliderChanged();
return $deletedSliders;
}
public function deleteSlider($sliderID) {
$helper = new HelperSliderChanged($this);
$helper->setSliderChanged($sliderID, 1);
SmartSlider3Info::sliderChanged();
return $this->table->deleteByAttributes(array(
'slider_id' => $sliderID
));
}
public function deleteXref($groupID, $sliderID) {
$helper = new HelperSliderChanged($this);
$helper->setSliderChanged($sliderID, 1);
$helper->setSliderChanged($groupID, 1);
SmartSlider3Info::sliderChanged();
return $this->table->deleteByAttributes(array(
'group_id' => $groupID,
'slider_id' => $sliderID
));
}
public function getSliders($groupID, $status = '*') {
if ($status !== '*') {
$slidersModel = new ModelSliders($this);
return Database::queryAll("
SELECT xref.slider_id
FROM " . $this->getTableName() . " AS xref
LEFT JOIN " . $slidersModel->getTableName() . " AS
sliders ON sliders.id = xref.slider_id
WHERE xref.group_id = '" . $groupID . "'
AND sliders.status LIKE " . Database::quote($status) . "
ORDER BY xref.ordering ASC");
}
return Database::queryAll("
SELECT slider_id
FROM " . $this->getTableName() . "
WHERE group_id = '" . $groupID . "'
ORDER BY ordering ASC");
}
public function getGroupsIDs($sliderID) {
$ids = array();
$result = Database::queryAll("
SELECT group_id
FROM " . $this->getTableName() . "
WHERE slider_id = '" . $sliderID . "'
ORDER BY ordering ASC");
foreach ($result as $row) {
$ids[] = $row['group_id'];
}
return $ids;
}
public function getGroups($sliderID, $status = '*') {
$slidersModel = new ModelSliders($this);
$wheres = array("xref.slider_id = '" . $sliderID .
"'");
if ($status !== '*') {
$wheres[] = "sliders.status LIKE '" . $status .
"'";
}
$result = Database::queryAll("
SELECT xref.group_id, sliders.title
FROM " . $this->getTableName() . " AS xref
LEFT JOIN " . $slidersModel->getTableName() . " AS
sliders ON sliders.id = xref.group_id
WHERE " . implode(' AND ', $wheres) . "
ORDER BY xref.group_id ASC");
if (!empty($result)) {
return $result;
}
return array(
array(
"group_id" => 0,
"title" => n2_('Dashboard')
)
);
}
protected function getMaximalOrderValue($groupID) {
$query = "SELECT MAX(ordering) AS ordering FROM " .
$this->getTableName() . " WHERE group_id = '" .
intval($groupID) . "'";
$result = Database::queryRow($query);
if (isset($result['ordering'])) return
$result['ordering'] + 1;
return 0;
}
/**
* @param $sliderID
*
* @return bool
*/
public function isSliderAvailableInAnyGroups($sliderID) {
$allRelatedGroups = $this->getGroups($sliderID);
$slidersModel = new ModelSliders($this);
foreach ($allRelatedGroups AS $group) {
if ($group['group_id'] != 0) {
/*
* It is a group
*/
$sliderRow =
$slidersModel->get($group['group_id']);
if (isset($sliderRow['status']) &&
$sliderRow['status'] === 'published') {
return true;
}
} else {
/*
* It is a slider
*/
$sliderRow = $slidersModel->get($sliderID);
if (isset($sliderRow['status']) &&
$sliderRow['status'] === 'published') {
return true;
}
}
}
return false;
}
}PK9e�[yQ��UYUY!Application/Model/ModelSlides.phpnu�[���<?php
namespace Nextend\SmartSlider3\Application\Model;
use Nextend\Framework\Data\Data;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Misc\Base64;
use Nextend\Framework\Model\AbstractModelTable;
use Nextend\Framework\Request\Request;
use Nextend\SmartSlider3\Application\Helper\HelperSliderChanged;
use Nextend\SmartSlider3\Renderable\Component\AbstractComponent;
use Nextend\SmartSlider3\Renderable\Component\ComponentCol;
use Nextend\SmartSlider3\Renderable\Component\ComponentContent;
use Nextend\SmartSlider3\Renderable\Component\ComponentLayer;
use Nextend\SmartSlider3\Renderable\Component\ComponentRow;
use Nextend\SmartSlider3\SlideBuilder\BuilderComponentLayer;
use Nextend\SmartSlider3\SlideBuilder\BuilderComponentSlide;
use Nextend\SmartSlider3\Slider\Slide;
use Nextend\SmartSlider3\Slider\Slider;
use Nextend\SmartSlider3\SmartSlider3Info;
use Nextend\SmartSlider3Pro\Renderable\Component\ComponentGroup;
class ModelSlides extends AbstractModelTable {
protected function createConnectorTable() {
return
Database::getTable('nextend2_smartslider3_slides');
}
public function get($id) {
return $this->table->findByPk($id);
}
public function getAll($sliderid = 0, $where = '') {
return Database::queryAll('SELECT * FROM ' .
$this->getTableName() . ' WHERE slider = ' . $sliderid .
' ' . $where . ' ORDER BY ordering', false,
"assoc", null);
}
public function createQuickImage($image, $sliderId) {
$parameters = array(
'background-type' => 'image',
'backgroundImage' => $image['image']
);
if (!empty($image['alt'])) {
$parameters['backgroundAlt'] =
$image['alt'];
}
$slideID = $this->create($sliderId, $image['title'],
array(), $image['image'], $parameters, array(
'description' => $image['description']
));
$this->markChanged($sliderId);
return $slideID;
}
public function createQuickEmptySlide($sliderId) {
$parameters = array(
'background-type' => 'color'
);
$slideID = $this->create($sliderId, 'Slide', array(),
'', $parameters);
$this->markChanged($sliderId);
return $slideID;
}
public function createQuickStaticOverlay($sliderId) {
$parameters = array(
'static-slide' => 1
);
$slideID = $this->create($sliderId, n2_('Static
overlay'), array(), '', $parameters);
$this->markChanged($sliderId);
return $slideID;
}
public function createQuickPost($post, $sliderId) {
$data = new Data($post);
$title =
$this->removeFourByteChars($data->get('title'));
$description =
$this->removeFourByteChars($data->get('description'));
$slideBuilder = new BuilderComponentSlide(array(
'title' => $title,
'description' => $description,
'thumbnail' =>
$data->get('image'),
'background-type' => 'image',
'backgroundImage' =>
$data->get('image'),
'backgroundImageOpacity' => 20,
'backgroundColor' => '000000FF'
));
$slideBuilder->content->set(array(
'desktopportraitpadding' =>
'10|*|100|*|10|*|100|*|px',
'mobileportraitpadding' =>
'10|*|10|*|10|*|10|*|px'
));
if ($title) {
$heading = new BuilderComponentLayer($slideBuilder->content,
'heading');
$heading->item->set(array(
'heading' => '{name/slide}',
'font' =>
Base64::encode('{"data":[{"extra":"","color":"ffffffff","size":"48||px","tshadow":"0|*|0|*|0|*|000000ff","afont":"Roboto,Arial","lineheight":"1.5","bold":0,"italic":0,"underline":0,"align":"inherit","letterspacing":"normal","wordspacing":"normal","texttransform":"none"},{"extra":""}]}'),
));
}
if ($description) {
$text = new BuilderComponentLayer($slideBuilder->content,
'text');
$text->set(array(
'desktopportraitmargin' =>
'0|*|0|*|20|*|0|*|px',
));
$text->item->set(array(
'content' => '{description/slide}',
'font' =>
Base64::encode('{"data":[{"extra":"","color":"ffffffff","size":"18||px","tshadow":"0|*|0|*|0|*|000000ff","afont":"Roboto,Arial","lineheight":"1.5","bold":0,"italic":0,"underline":0,"align":"inherit","letterspacing":"normal","wordspacing":"normal","texttransform":"none"},{"extra":""}]}'),
));
}
$link = $data->get('link');
if (!empty($link)) {
$buttonLayer = new
BuilderComponentLayer($slideBuilder->content, 'button');
$buttonLayer->item->set(array(
'content' => n2_('Read more'),
'link' => $link . '|*|_self'
));
}
$row =
$this->convertSlideDataToDatabaseRow($slideBuilder->getData(),
$sliderId);
$slideID = $this->create($row['slider'],
$row['title'], $row['slide'],
$row['thumbnail'], $row['params'], array(
'description' => $row['description'],
'published' => $row['published'],
'publish_up' => $row['publish_up'],
'publish_down' => $row['publish_down']
));
$this->markChanged($sliderId);
return $slideID;
}
public function createSimpleEditAdd($postData, $sliderId) {
$data = new Data($postData);
$title = $data->get('title', '');
$description = $data->get('description',
'');
$slideBuilder = new BuilderComponentSlide(array(
'title' => $title,
'description' => $description,
'thumbnailType' =>
$data->get('thumbnailType', ''),
'thumbnail' =>
$data->get('backgroundImage', ''),
'background-type' => 'image',
'backgroundImage' =>
$data->get('backgroundImage', ''),
'backgroundImageOpacity' => 100,
'backgroundColor' => '000000FF',
'href' =>
$data->get('href', ''),
'href-target' =>
$data->get('href-target', '')
));
$slideBuilder->content->set(array(
'desktopportraitpadding' =>
'10|*|100|*|10|*|100|*|px',
'mobileportraitpadding' =>
'10|*|10|*|10|*|10|*|px'
));
$videoUrl = $data->get('video', '');
if (!empty($videoUrl)) {
preg_match('/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/',
$videoUrl, $matches);
if (!empty($matches)) {
/**
* YouTube
*/
$thumbnail = 'https://i.ytimg.com/vi/' .
$matches[2] . '/hqdefault.jpg';
$slideBuilder->set('thumbnail', $thumbnail);
$youtubeLayer = new
BuilderComponentLayer($slideBuilder->content, 'youtube');
$youtubeLayer->item->set(array(
'code' => $matches[2],
'youtubeurl' => $videoUrl,
'image' => $thumbnail
));
} else {
preg_match('/https?:\/\/(?:www\.|player\.)?vimeo.com\/(?:channels\/(?:\w+\/)?|groups\/([^\/]*)\/videos\/|album\/(\d+)\/video\/|video\/|)(\d+)(?:$|\/|\?)/',
$videoUrl, $matches);
if (!empty($matches)) {
/**
* Vimeo
*/
$vimeoLayer = new
BuilderComponentLayer($slideBuilder->content, 'vimeo');
$vimeoLayer->item->set(array(
'vimeourl' => $videoUrl
));
} else {
/**
* MP4
*/
$mp4Layer = new
BuilderComponentLayer($slideBuilder->content, 'video');
$mp4Layer->item->set(array(
'video_mp4' => $videoUrl
));
}
}
}
/*
if ($title) {
$heading = new BuilderComponentLayer($slideBuilder->content,
'heading');
$heading->item->set(array(
'heading' => '{name/slide}'
));
}
*/
$row =
$this->convertSlideDataToDatabaseRow($slideBuilder->getData(),
$sliderId);
$slideID = $this->create($row['slider'],
$row['title'], $row['slide'],
$row['thumbnail'], $row['params'], array(
'description' => $row['description'],
'published' => $row['published'],
'publish_up' => $row['publish_up'],
'publish_down' => $row['publish_down']
));
$this->markChanged($sliderId);
return $slideID;
}
public function import($row, $sliderId) {
if (!$row['params']->has('version')) {
/**
* We must set the missing empty version to allow upgrade of
the old slides
*/
$row['params']->set('version',
'');
}
return $this->create($sliderId, $row['title'],
$row['slide'], $row['thumbnail'],
$row['params']->toArray(), array(
'description' => $row['description'],
'published' => $row['published'],
'publish_up' => $row['publish_up'],
'publish_down' => $row['publish_down'],
'first' => $row['first'],
'ordering' => $row['ordering'],
'generator_id' => $row['generator_id']
));
}
private function create($sliderID, $title, $layers, $thumbnail, $params
= array(), $optional = array()) {
if (!isset($optional['ordering'])) {
$optional['ordering'] =
$this->getNextOrdering($sliderID);
}
if (!isset($params['version'])) {
$params['version'] = SmartSlider3Info::$version;
}
$data = array_merge(array(
'description' => '',
'first' => 0,
'published' => 1,
'publish_up' => '1970-01-01 00:00:00',
'publish_down' => '1970-01-01 00:00:00',
'generator_id' => 0
), $optional, array(
'title' => $title,
'slide' => json_encode($layers,
JSON_UNESCAPED_SLASHES),
'thumbnail' => $thumbnail,
'params' => json_encode($params,
JSON_UNESCAPED_SLASHES),
'slider' => $sliderID
));
$this->table->insert($data);
return $this->table->insertId();
}
/**
* @param $sliderId
* @param int $generatorID
* @param $slide
*
* @return bool
*/
public function createSlideWithGenerator($sliderId, $generatorID,
$slide) {
$row = $this->convertSlideDataToDatabaseRow($slide, $sliderId);
$slideId = $this->create($row['slider'],
$row['title'], $row['slide'],
$row['thumbnail'], $row['params'], array(
'description' => $row['description'],
'published' => $row['published'],
'publish_up' => $row['publish_up'],
'publish_down' => $row['publish_down'],
'generator_id' => $generatorID
));
$this->markChanged($sliderId);
return $slideId;
}
/**
* @param int $slideID
* @param string $slide
* @param string $guides
*
* @return bool
*/
public function save($slideID, $slide, $guides) {
$slideData = json_decode(Base64::decode($slide), true);
$slideData['guides'] = $guides;
$row = $this->convertSlideDataToDatabaseRow($slideData);
$this->table->update(array(
'title' => $row['title'],
'slide' =>
json_encode($row['slide'], JSON_UNESCAPED_SLASHES),
'description' => $row['description'],
'thumbnail' => $row['thumbnail'],
'published' => $row['published'],
'publish_up' => $row['publish_up'],
'publish_down' => $row['publish_down'],
'params' =>
json_encode($row['params'], JSON_UNESCAPED_SLASHES)
), array('id' => $slideID));
$this->markChanged(Request::$REQUEST->getInt('sliderid'));
return true;
}
public function saveSimple($slideID, $title, $description, $params) {
$this->table->update(array(
'title' => $title,
'description' => $description,
'params' => json_encode($params,
JSON_UNESCAPED_SLASHES)
), array('id' => $slideID));
}
/**
* Updates the params field of the slide;
*
* @param $id
* @param $params
*/
public function updateSlideParams($id, $params) {
$this->table->update(array(
'params' => json_encode($params)
), array('id' => $id));
}
public function delete($id) {
$slide = $this->get($id);
if ($slide['generator_id'] > 0) {
$slidesWithSameGenerator =
$this->getAll($slide['slider'], 'AND generator_id =
' . intval($slide['generator_id']));
if (count($slidesWithSameGenerator) == 1) {
$generatorModel = new ModelGenerator($this);
$generatorModel->delete($slide['generator_id']);
}
}
$this->table->deleteByAttributes(array(
"id" => intval($id)
));
$this->markChanged($slide['slider']);
}
/**
* @param int $id
* @param bool $maintainOrdering
* @param bool|int $targetSliderId
*
* @return int The new slide ID;
*/
public function copyTo($id, $maintainOrdering = false, $targetSliderId
= false) {
$row = $this->get($id);
unset($row['id']);
$row['first'] = 0;
if ($targetSliderId === false || $row['slider'] ==
$targetSliderId) {
/**
* Copy the slide to the same slider
*/
$this->shiftSlideOrdering($row['slider'],
$row['ordering']);
} else {
/**
* Copy the slide to another slider
*/
$row['slider'] = $targetSliderId;
if (!$maintainOrdering) {
unset($row['ordering']);
}
}
if (!empty($row['generator_id'])) {
$generatorModel = new ModelGenerator($this);
$row['generator_id'] =
$generatorModel->duplicate($row['generator_id']);
}
$row['slide'] =
json_encode(AbstractComponent::translateUniqueIdentifier(json_decode($row['slide'],
true)), JSON_UNESCAPED_SLASHES);
$this->table->insert($row);
$id = $this->table->insertId();
$this->markChanged($row['slider']);
return $id;
}
public function setTitle($id, $title) {
$slide = $this->get($id);
$this->table->update(array(
"title" => $title
), array(
"id" => $id
));
$this->markChanged($slide['slider']);
}
public function first($id) {
$slide = $this->get($id);
$this->table->update(array(
"first" => 0
), array(
"slider" => $slide['slider']
));
$this->table->update(array(
"first" => 1
), array(
"id" => $id
));
$this->markChanged($slide['slider']);
}
public function publish($id) {
$this->markChanged(Request::$REQUEST->getInt('sliderid'));
return $this->table->update(array(
"published" => 1
), array("id" => intval($id)));
}
public function unPublish($id) {
$this->table->update(array(
"published" => 0
), array(
"id" => intval($id)
));
$this->markChanged(Request::$REQUEST->getInt('sliderid'));
}
public function convertToSlide($id) {
$slide = $this->get($id);
$data = new Data($slide['params'], true);
$data->set('static-slide', 0);
$this->table->update(array(
"params" => $data->toJSON()
), array(
"id" => intval($id)
));
$this->markChanged($slide['slider']);
}
public function deleteBySlider($sliderid) {
$slides = $this->getAll($sliderid);
foreach ($slides as $slide) {
$this->delete($slide['id']);
}
$this->markChanged($sliderid);
}
/**
* @param $sliderid
* @param $ids
*
* @return bool|int
*/
public function order($sliderid, $ids) {
if (is_array($ids) && count($ids) > 0) {
$i = 0;
foreach ($ids as $id) {
$id = intval($id);
if ($id > 0) {
$this->table->update(array(
'ordering' => $i + 1,
), array(
"id" => $id,
"slider" => $sliderid
));
$i++;
}
}
$this->markChanged($sliderid);
return $i;
}
return false;
}
private function markChanged($sliderid) {
$helper = new HelperSliderChanged($this);
$helper->setSliderChanged($sliderid, 1);
}
public function convertDynamicSlideToSlides($slideId) {
$slideData = $this->get($slideId);
if ($slideData['generator_id'] > 0) {
$sliderObj = new Slider($this, $slideData['slider'],
array(), true);
$rootSlide = new Slide($sliderObj, $slideData);
$rootSlide->initGenerator(array());
$slides = $rootSlide->expandSlide();
$this->shiftSlideOrdering($slideData['slider'],
$slideData['ordering'], count($slides));
$firstUsed = false;
$i = 1;
foreach ($slides as $slide) {
$row = $slide->getRow();
// set the proper ordering
$row['ordering'] += $i;
if ($row['first']) {
// Make sure to mark only one slide as start slide
if ($firstUsed) {
$row['first'] = 0;
} else {
$firstUsed = true;
}
}
$this->table->insert($row);
$i++;
}
Database::query("UPDATE {$this->getTableName()} SET
published = 0, first = 0 WHERE id = :id", array(
":id" => $slideData['id']
));
return count($slides);
} else {
return false;
}
}
public static function prepareSample(&$layers) {
for ($i = 0; $i < count($layers); $i++) {
if (isset($layers[$i]['type'])) {
switch ($layers[$i]['type']) {
case 'content':
ComponentContent::prepareSample($layers[$i]);
break;
case 'row':
ComponentRow::prepareSample($layers[$i]);
break;
case 'col':
ComponentCol::prepareSample($layers[$i]);
break;
default:
ComponentLayer::prepareSample($layers[$i]);
}
} else {
ComponentLayer::prepareSample($layers[$i]);
}
}
}
public function convertSlideDataToDatabaseRow($slideData, $sliderID =
false) {
$slideData['version'] = SmartSlider3Info::$version;
$publish_up = '1970-01-01 00:00:00';
if (isset($slideData['publish_up'])) {
if ($slideData['publish_up'] != '0000-00-00
00:00:00') {
$publish_up = date('Y-m-d H:i:s',
strtotime($slideData['publish_up']));
} else {
$publish_up = '1970-01-01 00:00:00';
}
}
$publish_down = '1970-01-01 00:00:00';
if (isset($slideData['publish_down'])) {
if ($slideData['publish_down'] != '0000-00-00
00:00:00') {
$publish_down = date('Y-m-d H:i:s',
strtotime($slideData['publish_down']));
} else {
$publish_down = '1970-01-01 00:00:00';
}
}
$row = array(
'title' => $slideData['title'],
'slide' => '',
'description' =>
$slideData['description'],
'thumbnail' =>
$slideData['thumbnail'],
'published' =>
(isset($slideData['published']) ?
$slideData['published'] : 1),
'publish_up' => $publish_up,
'publish_down' => $publish_down
);
if ($sliderID !== false) {
$row['slider'] = $sliderID;
}
$row['slide'] = $slideData['layers'];
if (isset($slideData['first'])) {
$row['first'] =
intval($slideData['first']);
}
if (isset($slideData['generator_id']) &&
$slideData['generator_id'] > 0) {
$row['generator_id'] =
intval($slideData['generator_id']);
}
unset($slideData['title']);
unset($slideData['layers']);
unset($slideData['description']);
unset($slideData['thumbnail']);
unset($slideData['published']);
unset($slideData['first']);
unset($slideData['publish_up']);
unset($slideData['publish_down']);
unset($slideData['ordering']);
unset($slideData['generator_id']);
$row['params'] = $slideData;
return $row;
}
private function removeFourByteChars($text) {
return preg_replace('/[\x{10000}-\x{10FFFF}]/u',
"\xEF\xBF\xBD", $text);
}
/**
* @param int $sliderID
*
* @return int
*/
private function getNextOrdering($sliderID) {
$query = "SELECT MAX(ordering) AS ordering FROM " .
$this->getTableName() . " WHERE slider = :id";
$result = Database::queryRow($query, array(
":id" => intval($sliderID)
));
if (isset($result['ordering'])) {
return $result['ordering'] + 1;
}
return 1;
}
/**
* @param int $sliderID
* @param int $offset
* @param int $slidesCount
*/
private function shiftSlideOrdering($sliderID, $offset, $slidesCount =
1) {
// Shift the afterwards slides with the slides count
Database::query("UPDATE {$this->getTableName()} SET
ordering = ordering + " . $slidesCount . " WHERE slider =
:sliderid AND ordering > :ordering", array(
":sliderid" => intval($sliderID),
":ordering" => intval($offset)
), '');
}
}PK9e�[ZN����2BackgroundAnimation/BackgroundAnimationManager.phpnu�[���<?php
namespace Nextend\SmartSlider3\BackgroundAnimation;
use Nextend\Framework\Pattern\VisualManagerTrait;
use
Nextend\SmartSlider3\BackgroundAnimation\Block\BackgroundAnimationManager\BlockBackgroundAnimationManager;
class BackgroundAnimationManager {
use VisualManagerTrait;
public function display() {
$backgroundAnimationManagerBlock = new
BlockBackgroundAnimationManager($this->MVCHelper);
$backgroundAnimationManagerBlock->display();
}
}PK9e�[�E
2BackgroundAnimation/BackgroundAnimationStorage.phpnu�[���<?php
namespace Nextend\SmartSlider3\BackgroundAnimation;
use Nextend\Framework\Pattern\SingletonTrait;
use Nextend\Framework\Plugin;
class BackgroundAnimationStorage {
use SingletonTrait;
private $sets = array();
private $animation = array();
private $animationBySet = array();
private $animationById = array();
protected function init() {
Plugin::addAction('smartsliderbackgroundanimationset',
array(
$this,
'animationSet'
));
Plugin::addAction('smartsliderbackgroundanimation',
array(
$this,
'animations'
));
Plugin::addAction('backgroundanimation', array(
$this,
'animation'
));
}
private function load() {
static $loaded;
if (!$loaded) {
Plugin::doAction('backgroundAnimationStorage', array(
&$this->sets,
&$this->animation
));
for ($i = 0; $i < count($this->animation); $i++) {
if
(!isset($this->animationBySet[$this->animation[$i]['referencekey']]))
{
$this->animationBySet[$this->animation[$i]['referencekey']]
= array();
}
$this->animationBySet[$this->animation[$i]['referencekey']][]
= &$this->animation[$i];
$this->animationById[$this->animation[$i]['id']]
= &$this->animation[$i];
}
$loaded = true;
}
}
public function animationSet($referenceKey, &$sets) {
$this->load();
for ($i = count($this->sets) - 1; $i >= 0; $i--) {
$this->sets[$i]['system'] = 1;
$this->sets[$i]['editable'] = 0;
array_unshift($sets, $this->sets[$i]);
}
}
public function animations($referenceKey, &$animation) {
$this->load();
if (isset($this->animationBySet[$referenceKey])) {
$_animation = &$this->animationBySet[$referenceKey];
for ($i = count($_animation) - 1; $i >= 0; $i--) {
$_animation[$i]['system'] = 1;
$_animation[$i]['editable'] = 0;
array_unshift($animation, $_animation[$i]);
}
}
}
public function animation($id, &$animation) {
$this->load();
if (isset($this->animationById[$id])) {
$this->animationById[$id]['system'] = 1;
$this->animationById[$id]['editable'] = 0;
$animation =
$this->animationById[$id];
}
}
}PK9e�[��ccXBackgroundAnimation/Block/BackgroundAnimationManager/BlockBackgroundAnimationManager.phpnu�[���<?php
namespace
Nextend\SmartSlider3\BackgroundAnimation\Block\BackgroundAnimationManager;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\Visual\AbstractBlockVisual;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButtonApply;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButtonCancel;
use Nextend\SmartSlider3\BackgroundAnimation\ModelBackgroundAnimation;
class BlockBackgroundAnimationManager extends AbstractBlockVisual {
/** @var ModelBackgroundAnimation */
protected $model;
/**
* @return ModelBackgroundAnimation
*/
public function getModel() {
return $this->model;
}
public function display() {
$this->model = new ModelBackgroundAnimation($this);
$this->renderTemplatePart('Index');
}
public function displayTopBar() {
$buttonCancel = new BlockButtonCancel($this);
$buttonCancel->addClass('n2_fullscreen_editor__cancel');
$buttonCancel->display();
$buttonApply = new BlockButtonApply($this);
$buttonApply->addClass('n2_fullscreen_editor__save');
$buttonApply->display();
}
public function displayContent() {
$model = $this->getModel();
Js::addFirstCode("
new _N2.BgAnimationManager({
setsIdentifier: '" . $model->getType() .
"set',
sets: " . json_encode($model->getSets()) . ",
visuals: {},
ajaxUrl: '" .
$this->createAjaxUrl(array('backgroundanimation/index')) .
"'
});
");
$model->renderForm();
}
}PK9e�[��.�cc>BackgroundAnimation/Block/BackgroundAnimationManager/Index.phpnu�[���<?php
namespace
Nextend\SmartSlider3\BackgroundAnimation\Block\BackgroundAnimationManager;
/**
* @var BlockBackgroundAnimationManager $this
*/
?>
<div id="n2-lightbox-backgroundanimation"
class="n2_fullscreen_editor">
<div class="n2_fullscreen_editor__overlay"></div>
<div class="n2_fullscreen_editor__window">
<div class="n2_fullscreen_editor__nav_bar">
<div
class="n2_fullscreen_editor__nav_bar_label">
<?php n2_e('Background animation'); ?>
</div>
<div
class="n2_fullscreen_editor__nav_bar_actions">
<?php $this->displayTopBar(); ?>
</div>
</div>
<div class="n2_fullscreen_editor__content">
<div class="n2_fullscreen_editor__content_sidebar
n2_container_scrollable">
<?php
$this->getModel()
->renderSetsForm();
?>
</div>
<div class="n2_fullscreen_editor__content_content
n2_container_scrollable">
<?php $this->displayContent(); ?>
</div>
</div>
</div>
</div>
PK9e�[q̱yee9BackgroundAnimation/ControllerAjaxBackgroundAnimation.phpnu�[���<?php
namespace Nextend\SmartSlider3\BackgroundAnimation;
use Nextend\Framework\Controller\Admin\AdminVisualManagerAjaxController;
class ControllerAjaxBackgroundAnimation extends
AdminVisualManagerAjaxController {
protected $type = 'backgroundanimation';
public function getModel() {
return new ModelBackgroundAnimation($this);
}
}PK9e�[���0BackgroundAnimation/ModelBackgroundAnimation.phpnu�[���<?php
namespace Nextend\SmartSlider3\BackgroundAnimation;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Text\Color;
use Nextend\Framework\Form\Fieldset\FieldsetVisualSet;
use Nextend\Framework\Form\Form;
use Nextend\Framework\Model\StorageSectionManager;
use Nextend\Framework\Visual\ModelVisual;
class ModelBackgroundAnimation extends ModelVisual {
protected $type = 'backgroundanimation';
protected function init() {
BackgroundAnimationStorage::getInstance();
$this->storage =
StorageSectionManager::getStorage('smartslider');
}
public function renderSetsForm() {
$form = new Form($this, $this->type . 'set');
$form->addClass('n2_fullscreen_editor__content_sidebar_top_bar');
$form->setDark();
$setsTab = new FieldsetVisualSet($form->getContainer(),
'backgroundanimation-sets', n2_('Animation type'));
new Select($setsTab, 'sets', false);
echo $form->render();
}
public function renderForm() {
$form = new Form($this, 'n2-background-animation');
$table = new ContainerTable($form->getContainer(),
'background-animation-preview', n2_('Preview'));
$table->setFieldsetPositionEnd();
new Color($table->getFieldsetLabel(), 'color', false,
'333333ff', array(
'alpha' => true
));
$form->render();
}
}PK9e�[iFZQ��BackupSlider/BackupData.phpnu�[���<?php
namespace Nextend\SmartSlider3\BackupSlider;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
class BackupData {
public $NextendImageHelper_Export, $slider, $slides, $generators =
array(), $NextendImageManager_ImageData = array(), $imageTranslation =
array(), $visuals = array();
public function __construct() {
$this->NextendImageHelper_Export =
ResourceTranslator::exportData();
}
}PK9e�[�sgM�I�IBackupSlider/ExportSlider.phpnu�[���<?php
namespace Nextend\SmartSlider3\BackupSlider;
use Nextend\Framework\Asset\AssetManager;
use Nextend\Framework\Asset\Builder\BuilderCss;
use Nextend\Framework\Asset\Builder\BuilderJs;
use Nextend\Framework\Asset\Predefined;
use Nextend\Framework\Data\Data;
use Nextend\Framework\Filesystem\Filesystem;
use Nextend\Framework\Image\ImageManager;
use Nextend\Framework\Misc\Zip\Creator;
use Nextend\Framework\Model\Section;
use Nextend\Framework\PageFlow;
use Nextend\Framework\Pattern\MVCHelperTrait;
use Nextend\Framework\Platform\Platform;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\Framework\Url\Url;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Application\ApplicationSmartSlider3;
use Nextend\SmartSlider3\Application\Model\ModelGenerator;
use Nextend\SmartSlider3\Application\Model\ModelSliders;
use Nextend\SmartSlider3\Application\Model\ModelSlidersXRef;
use Nextend\SmartSlider3\Application\Model\ModelSlides;
use Nextend\SmartSlider3\Renderable\Component\ComponentCol;
use Nextend\SmartSlider3\Renderable\Component\ComponentContent;
use Nextend\SmartSlider3\Renderable\Component\ComponentLayer;
use Nextend\SmartSlider3\Renderable\Component\ComponentRow;
use Nextend\SmartSlider3\Slider\SliderParams;
use Nextend\SmartSlider3\Slider\SliderType\SliderTypeFactory;
use Nextend\SmartSlider3\Widget\AbstractWidget;
use Nextend\SmartSlider3\Widget\WidgetGroupFactory;
use Nextend\SmartSlider3Pro\Renderable\Component\ComponentGroup;
class ExportSlider {
use MVCHelperTrait;
private $uniqueCounter = 1;
/**
* @var BackupData
*/
private $backup;
private $sliderId = 0;
public $images = array(), $visuals = array();
private $files, $usedNames = array(), $imageTranslation = array();
public function __construct($MVCHelper, $sliderId) {
$this->setMVCHelper($MVCHelper);
$this->sliderId = $sliderId;
}
public function create($saveAsFile = false) {
$this->backup = new BackupData();
$slidersModel = new ModelSliders($this);
if ($this->backup->slider =
$slidersModel->get($this->sliderId)) {
$zip = new Creator();
if (empty($this->backup->slider['type'])) {
$this->backup->slider['type'] =
'simple';
}
self::addImage($this->backup->slider['thumbnail']);
$this->backup->slider['params'] = new
SliderParams($this->backup->slider['id'],
$this->backup->slider['type'],
$this->backup->slider['params'], true);
if ($this->backup->slider['type'] ==
'group') {
$xref = new ModelSlidersXRef($this);
$sliders =
$xref->getSliders($this->backup->slider['id'],
'published');
foreach ($sliders as $k => $slider) {
$export = new self($this->MVCHelper,
$slider['slider_id']);
$fileName = $export->create(true);
$zip->addFile(file_get_contents($fileName),
'sliders/' . $k . '.ss3');
unlink($fileName);
}
} else {
$slidesModel = new ModelSlides($this);
$this->backup->slides =
$slidesModel->getAll($this->backup->slider['id']);
$sliderType =
SliderTypeFactory::getType($this->backup->slider['type']);
$sliderType->export($this, $this->backup->slider);
/** @var AbstractWidget[] $enabledWidgets */
$enabledWidgets = array();
$widgetGroups = WidgetGroupFactory::getGroups();
$params = $this->backup->slider['params'];
foreach ($widgetGroups as $groupName => $group) {
$widgetName = $params->get('widget' .
$groupName);
if ($widgetName && $widgetName !=
'disabled') {
$widget = $group->getWidget($widgetName);
if ($widget) {
$enabledWidgets[$groupName] = $widget;
}
}
}
foreach ($enabledWidgets as $k => $widget) {
$params->fillDefault($widget->getDefaults());
$widget->prepareExport($this, $params);
}
for ($i = 0; $i < count($this->backup->slides);
$i++) {
$slide = $this->backup->slides[$i];
self::addImage($slide['thumbnail']);
$slide['params'] = new
Data($slide['params'], true);
self::addImage($slide['params']->get('backgroundImage'));
self::addImage($slide['params']->get('ligthboxImage'));
if
($slide['params']->has('link')) {
// Compatibility fix for the old SS3 import files
self::addLightbox($slide['params']->get('link'));
}
if
($slide['params']->has('href')) {
self::addLightbox($slide['params']->get('href'));
}
self::addImage($slide['params']->get('backgroundVideoMp4'));
$layers = json_decode($slide['slide'], true);
$this->prepareLayer($layers);
if (!empty($slide['generator_id'])) {
$generatorModel = new
ModelGenerator($this);
$this->backup->generators[] =
$generatorModel->get($slide['generator_id']);
}
}
}
$this->images = array_unique($this->images);
$this->visuals = array_unique($this->visuals);
foreach ($this->images as $image) {
$this->backup->NextendImageManager_ImageData[$image]
= ImageManager::getImageData($image, true);
if
($this->backup->NextendImageManager_ImageData[$image]) {
self::addImage($this->backup->NextendImageManager_ImageData[$image]['tablet']['image']);
self::addImage($this->backup->NextendImageManager_ImageData[$image]['mobile']['image']);
} else {
unset($this->backup->NextendImageManager_ImageData[$image]);
}
}
$this->images = array_unique($this->images);
$usedNames = array();
foreach ($this->images as $image) {
$file = ResourceTranslator::toPath($image);
if (Filesystem::fileexists($file)) {
$fileName = strtolower(basename($file));
while (in_array($fileName, $usedNames)) {
$fileName = $this->uniqueCounter . $fileName;
$this->uniqueCounter++;
}
$usedNames[] = $fileName;
$this->backup->imageTranslation[$image] =
$fileName;
$zip->addFile(file_get_contents($file),
'images/' . $fileName);
}
}
foreach ($this->visuals as $visual) {
$this->backup->visuals[] = Section::getById($visual);
}
$zip->addFile(serialize($this->backup),
'data');
if (!$saveAsFile) {
PageFlow::cleanOutputBuffers();
header('Content-disposition: attachment;
filename*=UTF-8\'\'' .
rawurlencode($this->backup->slider['title'] .
'.ss3'));
header('Content-type: application/zip');
echo $zip->file();
PageFlow::exitApplication();
} else {
$file = $this->sliderId . '-' .
preg_replace('/[^a-zA-Z0-9_-]/', '',
$this->backup->slider['title']) . '.ss3';
$folder = Platform::getPublicDirectory();
$folder .= '/export/';
if (!Filesystem::existsFolder($folder)) {
Filesystem::createFolder($folder);
}
Filesystem::createFile($folder . $file, $zip->file());
return $folder . $file;
}
}
}
/**
* @param array $layers
*/
public function prepareLayer($layers) {
foreach ($layers as $layer) {
if (isset($layer['type'])) {
switch ($layer['type']) {
case 'content':
ComponentContent::prepareExport($this, $layer);
break;
case 'row':
ComponentRow::prepareExport($this, $layer);
break;
case 'col':
ComponentCol::prepareExport($this, $layer);
break;
case 'group':
$this->prepareLayer($layer['layers']);
break;
default:
ComponentLayer::prepareExport($this, $layer);
}
} else {
ComponentLayer::prepareExport($this, $layer);
}
}
}
public function createHTML($isZIP = true) {
Platform::setIsAdmin(false); //Some features are disabled on the
admin area
$this->files = array();
PageFlow::cleanOutputBuffers();
AssetManager::createStack();
Predefined::frontend(true);
ob_start();
$applicationTypeFrontend = ApplicationSmartSlider3::getInstance()
->getApplicationTypeFrontend();
$applicationTypeFrontend->process('slider',
'display', false, array(
'sliderID' => $this->sliderId,
'usage' => 'Export as HTML'
));
$slidersModel = new ModelSliders($this);
$slider = $slidersModel->get($this->sliderId);
$sliderHTML = ob_get_clean();
$headHTML = '';
$css = AssetManager::getCSS(true);
foreach ($css['url'] as $url) {
$headHTML .= Html::style($url, true, array(
'media' => 'screen, print'
)) . "\n";
}
array_unshift($css['files'],
ResourceTranslator::toPath('$ss3-frontend$/dist/normalize.min.css'));
foreach ($css['files'] as $file) {
if (file_exists($file)) {
$headHTML .= $this->addCSSFile($file);
} else {
}
}
if ($css['inline'] != '') {
$headHTML .= Html::style($css['inline']) .
"\n";
}
$js = AssetManager::getJs(true);
if ($js['globalInline'] != '') {
$headHTML .= Html::script($js['globalInline']) .
"\n";
}
foreach ($js['url'] as $url) {
$headHTML .= Html::scriptFile($url) . "\n";
}
foreach ($js['files'] as $file) {
$path = 'js/' . basename($file);
if (file_exists($file)) {
$this->files[$path] = file_get_contents($file);
} else {
}
$headHTML .= Html::scriptFile($path) . "\n";
}
if ($js['inline'] != '') {
$headHTML .= Html::script($js['inline']) .
"\n";
}
$sliderHTML =
preg_replace_callback('/(src|srcset)=["|\'](.*?)["|\']/i',
array(
$this,
'replaceHTMLImage'
), $sliderHTML);
$sliderHTML =
preg_replace_callback('/url\(\s*([\'"]|('))?(\S*\.(?:jpe?g|gif|png))([\'"]|('))?\s*\)[^;}]*?/i',
array(
$this,
'replaceHTMLBGImage'
), $sliderHTML);
$sliderHTML =
preg_replace_callback('/(data-href)=["|\'](.*?)["|\']/i',
array(
$this,
'replaceHTMLImage'
), $sliderHTML);
$sliderHTML =
preg_replace_callback('/(data-n2-lightbox-urls)=["|\'](.*?)["|\']/i',
array(
$this,
'replaceLightboxImages'
), $sliderHTML);
$sliderHTML =
preg_replace_callback('/data-n2-lightbox=[^<>]*?(href)=["|\'](.*?)["|\']/i',
array(
$this,
'replaceHTMLImageHrefLightbox'
), $sliderHTML);
$headHTML =
preg_replace_callback('/"([^"]*?\.(jpg|png|gif|jpeg|webp|svg))"/i',
array(
$this,
'replaceJSON'
), $headHTML);
$this->files['index.html'] = "<!doctype
html>\n<html lang=\"en\">\n<head>\n<meta
charset=\"utf-8\">\n<meta name=\"viewport\"
content=\"width=device-width, initial-scale=1\">\n<meta
http-equiv=\"X-UA-Compatible\" content=\"IE=edge,
chrome=1\">\n<title>" . $slider['title'] .
"</title>\n" . $headHTML .
"</head>\n<body>\n" . $sliderHTML .
"</body>\n</html>";
if (!$isZIP) {
return $this->files;
}
$zip = new Creator();
foreach ($this->files as $path => $content) {
$zip->addFile($content, $path);
}
PageFlow::cleanOutputBuffers();
header('Content-disposition: attachment;
filename*=UTF-8\'\'' .
rawurlencode($slider['title'] . '.zip'));
header('Content-type: application/zip');
echo $zip->file();
Platform::setIsAdmin(false); // Restore admin area
PageFlow::exitApplication();
}
private static function addProtocol($image) {
if (substr($image, 0, 2) == '//') {
return Url::addScheme($image);
}
return $image;
}
public function replaceHTMLImage($found) {
$path =
Filesystem::absoluteURLToPath(self::addProtocol($found[2]));
if (strpos($path, Filesystem::getBasePath()) !== 0) {
$imageUrl = Url::relativetoabsolute($path);
$path = Filesystem::absoluteURLToPath($imageUrl);
}
if ($path == $found[2]) {
return $found[0];
}
if (Filesystem::fileexists($path)) {
if (!isset($this->imageTranslation[$path])) {
$fileName = strtolower(basename($path));
while (in_array($fileName, $this->usedNames)) {
$fileName = $this->uniqueCounter . $fileName;
$this->uniqueCounter++;
}
$this->usedNames[] = $fileName;
$this->files['images/' . $fileName] =
file_get_contents($path);
$this->imageTranslation[$path] = $fileName;
} else {
$fileName = $this->imageTranslation[$path];
}
return str_replace($found[2], 'images/' . $fileName,
$found[0]);
} else {
return $found[0];
}
}
public function replaceHTMLImageHrefLightbox($found) {
return $this->replaceHTMLImage($found);
}
public function replaceLightboxImages($found) {
$images = explode(',', $found[2]);
foreach ($images as $k => $image) {
$images[$k] = $this->replaceHTMLImage(array(
$image,
'',
$image
));
}
return 'data-n2-lightbox-urls="' .
implode(',', $images) . '"';
}
public function replaceHTMLBGImage($found) {
$path = $this->replaceHTMLImage(array(
$found[3],
'',
$found[3]
));
return str_replace($found[3], $path, $found[0]);
}
public function replaceJSON($found) {
$image = str_replace('\\/', '/', $found[1]);
$path = $this->replaceHTMLImage(array(
$image,
'',
$image
));
return str_replace($found[1], str_replace('/',
'\\/', $path), $found[0]);
}
public function addImage($image) {
if (!empty($image)) {
$this->images[] = $image;
}
}
public function addLightbox($url) {
preg_match('/^([a-zA-Z]+)\[(.*)]/', $url, $matches);
if (!empty($matches)) {
if ($matches[1] == 'lightbox') {
$data = json_decode($matches[2]);
if ($data) {
foreach ($data->urls as $image) {
$this->addImage($image);
}
}
}
}
}
public function addVisual($id) {
if (is_numeric($id) && $id > 10000) {
$this->visuals[] = $id;
}
}
private $basePath;
private $baseUrl;
private function addCSSFile($file) {
return $this->addCSSFileWithContent($file,
file_get_contents($file));
}
private function addCSSFileWithContent($file, $fileContent) {
$path = 'css/' . basename($file);
$this->basePath = dirname($file);
$this->baseUrl =
Filesystem::pathToAbsoluteURL($this->basePath);
$fileContent =
preg_replace_callback('#url\([\'"]?([^"\'\)]+)[\'"]?\)#',
array(
$this,
'replaceCSSImage'
), $fileContent);
$this->files[$path] = $fileContent;
return Html::style($path, true, array(
'media' => 'screen, print'
)) . "\n";
}
public function replaceCSSImage($matches) {
if (substr($matches[1], 0, 5) == 'data:') return
$matches[0];
if (substr($matches[1], 0, 4) == 'http') {
$exploded = explode('?', $matches[1]);
$path =
ResourceTranslator::toPath(ResourceTranslator::urlToResource($exploded[0]));
if (strpos($path, $this->basePath) === 0) {
$exploded = explode('?', $matches[1]);
return str_replace($matches[1], 'assets/' .
$this->addFile($path) . '?' . $exploded[1], $matches[0]);
} else {
return $matches[0];
}
}
if (substr($matches[1], 0, 2) == '//') return
$matches[0];
$exploded = explode('?', $matches[1]);
$path = realpath($this->basePath . '/' .
$exploded[0]);
if ($path === false) {
return 'url(' . str_replace(array(
'http://',
'https://'
), '//', $this->baseUrl) . '/' .
$matches[1] . ')';
}
return str_replace($matches[1], 'assets/' .
$this->addFile($path), $matches[0]);
}
protected function addFile($path) {
$path = Filesystem::convertToRealDirectorySeparator($path);
if (!isset($this->imageTranslation[$path])) {
$fileName = strtolower(basename($path));
while (in_array($fileName, $this->usedNames)) {
$fileName = $this->uniqueCounter . $fileName;
$this->uniqueCounter++;
}
$this->usedNames[] = $fileName;
$this->files['css/assets/' . $fileName] =
file_get_contents($path);
$this->imageTranslation[$path] = $fileName;
} else {
$fileName = $this->imageTranslation[$path];
}
return $fileName;
}
}PK9e�[�\
�o-o-BackupSlider/ImportSlider.phpnu�[���<?php
namespace Nextend\SmartSlider3\BackupSlider;
use Nextend\Framework\Cache\StoreImage;
use Nextend\Framework\Data\Data;
use Nextend\Framework\Filesystem\Filesystem;
use Nextend\Framework\Image\ImageManager;
use Nextend\Framework\Misc\Zip\Reader;
use Nextend\Framework\Model\StorageSectionManager;
use Nextend\Framework\Notification\Notification;
use Nextend\Framework\Pattern\MVCHelperTrait;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\Framework\Url\Url;
use Nextend\SmartSlider3\Application\Model\ModelGenerator;
use Nextend\SmartSlider3\Application\Model\ModelSliders;
use Nextend\SmartSlider3\Application\Model\ModelSlides;
use Nextend\SmartSlider3\Renderable\Component\ComponentCol;
use Nextend\SmartSlider3\Renderable\Component\ComponentContent;
use Nextend\SmartSlider3\Renderable\Component\ComponentLayer;
use Nextend\SmartSlider3\Renderable\Component\ComponentRow;
use Nextend\SmartSlider3\Slider\SliderType\SliderTypeFactory;
use Nextend\SmartSlider3\Widget\WidgetGroupFactory;
class ImportSlider {
use MVCHelperTrait;
/**
* @var BackupData
*/
private $backup;
private $imageTranslation = array();
private $sectionTranslation = array();
private $sliderId = 0;
private $replace = false;
public function __construct($MVCHelper) {
$this->setMVCHelper($MVCHelper);
}
public function enableReplace() {
$this->replace = true;
}
public function import($filePathOrData, $groupID = 0, $imageImportMode
= 'clone', $linkedVisuals = 1, $isFilePath = true) {
if (!$isFilePath) {
$tmp = Filesystem::tempnam();
file_put_contents($tmp, $filePathOrData);
$filePathOrData = $tmp;
}
$importData = Reader::read($filePathOrData);
if (!$isFilePath) {
@unlink($tmp);
}
if (!is_array($importData)) {
Notification::error(n2_('The importing failed at the
unzipping part.'));
return false;
} else if (!isset($importData['data'])) {
if (array_key_exists("slider.ss2", $importData)) {
Notification::error(n2_('You can\'t import
sliders from Smart Slider 2.'));
} else if (empty($importData)) {
Notification::error(n2_('Export file corrupted! Slider
data is missing.'));
}
return false;
}
$this->backup = unserialize($importData['data']);
if (!empty($this->backup->slider['type'])
&& $this->backup->slider['type'] ==
'group') {
// Groups can not be imported into groups
$groupID = 0;
}
$this->sectionTranslation = array();
$this->importVisuals($this->backup->visuals,
$linkedVisuals);
$sliderModel = new ModelSliders($this);
if ($this->replace) {
$this->sliderId =
$sliderModel->replace($this->backup->slider, $groupID);
} else {
$this->sliderId =
$sliderModel->import($this->backup->slider, $groupID);
}
if (!$this->sliderId) {
return false;
}
switch ($imageImportMode) {
case 'clone':
$images = isset($importData['images']) ?
$importData['images'] : array();
$imageStore = new StoreImage('slider' .
$this->sliderId, true);
foreach ($images AS $file => $content) {
$localImage = $imageStore->makeCache($file,
$content);
if ($localImage) {
$this->imageTranslation[$file] =
ResourceTranslator::urlToResource(Url::pathToUri($localImage));
} else {
$this->imageTranslation[$file] = $file;
}
if (!$this->imageTranslation[$file]) {
$this->imageTranslation[$file] =
array_search($file, $this->backup->imageTranslation);
}
}
break;
case 'update':
$keys =
array_keys($this->backup->NextendImageHelper_Export);
$values =
array_values($this->backup->NextendImageHelper_Export);
foreach ($this->backup->imageTranslation AS $image
=> $value) {
$this->imageTranslation[$value] = str_replace($keys,
$values, $image);
}
break;
default:
break;
}
if (!empty($this->backup->slider['thumbnail'])) {
$sliderModel->setThumbnail($this->sliderId,
$this->fixImage($this->backup->slider['thumbnail']));
}
foreach ($this->backup->NextendImageManager_ImageData AS
$image => $data) {
$data['tablet']['image'] =
$this->fixImage($data['tablet']['image']);
$data['mobile']['image'] =
$this->fixImage($data['mobile']['image']);
$fixedImage = $this->fixImage($image);
if (!ImageManager::hasImageData($fixedImage)) {
ImageManager::addImageData($this->fixImage($image),
$data);
}
}
if (empty($this->backup->slider['type'])) {
$this->backup->slider['type'] =
'simple';
}
if ($this->backup->slider['type'] ==
'group') {
/**
* Import the sliders for the group!
*/
foreach ($importData['sliders'] AS $k => $slider)
{
$import = new self($this);
if ($this->replace) {
$import->enableReplace();
}
$import->import($slider, $this->sliderId,
$imageImportMode, $linkedVisuals, false);
}
} else {
unset($importData);
$sliderType =
SliderTypeFactory::getType($this->backup->slider['type']);
$sliderType->import($this, $this->backup->slider);
$enabledWidgets = array();
$widgetGroups = WidgetGroupFactory::getGroups();
$params = $this->backup->slider['params'];
foreach ($widgetGroups AS $groupName => $group) {
$widgetName = $params->get('widget' .
$groupName);
if ($widgetName && $widgetName !=
'disabled') {
$widget = $group->getWidget($widgetName);
if ($widget) {
$enabledWidgets[$groupName] = $widget;
}
}
}
foreach ($enabledWidgets AS $k => $widget) {
$params->fillDefault($widget->getDefaults());
$widget->prepareImport($this, $params);
}
$sliderModel->importUpdate($this->sliderId, $params);
$generatorTranslation = array();
$generatorModel = new ModelGenerator($this);
foreach ($this->backup->generators as $generator) {
$generatorTranslation[$generator['id']] =
$generatorModel->import($generator);
}
$slidesModel = new ModelSlides($this);
for ($i = 0; $i < count($this->backup->slides); $i++)
{
$slide = $this->backup->slides[$i];
$slide['params'] = new
Data($slide['params'], true);
$slide['thumbnail'] =
$this->fixImage($slide['thumbnail']);
$slide['params']->set('backgroundImage',
$this->fixImage($slide['params']->get('backgroundImage')));
$slide['params']->set('ligthboxImage',
$this->fixImage($slide['params']->get('ligthboxImage')));
if ($slide['params']->has('link')) {
// Compatibility fix for the old SS3 import files
$slide['params']->set('link',
$this->fixLightbox($slide['params']->get('link')));
}
if ($slide['params']->has('href')) {
$slide['params']->set('href',
$this->fixLightbox($slide['params']->get('href')));
}
$slide['params']->set('backgroundVideoMp4',
$this->fixImage($slide['params']->get('backgroundVideoMp4')));
$layers = json_decode($slide['slide'], true);
$this->prepareLayers($layers);
$slide['slide'] = $layers;
if
(isset($generatorTranslation[$slide['generator_id']])) {
$slide['generator_id'] =
$generatorTranslation[$slide['generator_id']];
}
$slidesModel->import($slide, $this->sliderId);
}
}
return $this->sliderId;
}
/**
* @param array $layers
*/
public function prepareLayers(&$layers) {
for ($i = 0; $i < count($layers); $i++) {
if (isset($layers[$i]['type'])) {
switch ($layers[$i]['type']) {
case 'content':
ComponentContent::prepareImport($this,
$layers[$i]);
break;
case 'row':
ComponentRow::prepareImport($this, $layers[$i]);
break;
case 'col':
ComponentCol::prepareImport($this, $layers[$i]);
break;
case 'group':
$this->prepareLayers($layers[$i]['layers']);
break;
default:
ComponentLayer::prepareImport($this, $layers[$i]);
}
} else {
ComponentLayer::prepareImport($this, $layers[$i]);
}
}
}
public function fixImage($image) {
if (isset($this->backup->imageTranslation[$image]) &&
isset($this->imageTranslation[$this->backup->imageTranslation[$image]]))
{
return
$this->imageTranslation[$this->backup->imageTranslation[$image]];
}
return $image;
}
public function fixSection($idOrRaw) {
if (isset($this->sectionTranslation[$idOrRaw])) {
return $this->sectionTranslation[$idOrRaw];
}
return $idOrRaw;
}
public function fixLightbox($url) {
preg_match('/^([a-zA-Z]+)\[(.*)]/', $url, $matches);
if (!empty($matches) && $matches[1] ==
'lightbox') {
$data = json_decode($matches[2]);
if ($data) {
$newImages = array();
foreach ($data->urls AS $image) {
$newImages[] = $this->fixImage($image);
}
$data->urls = $newImages;
$url = 'lightbox[' . json_encode($data) .
']';
}
}
return $url;
}
private function importVisuals($records, $linkedVisuals) {
if (count($records)) {
if (!$linkedVisuals) {
foreach ($records AS $record) {
$this->sectionTranslation[$record['id']] =
$record['value'];
}
} else {
$sets = array();
foreach ($records AS $record) {
$storage =
StorageSectionManager::getStorage($record['application']);
if (!isset($sets[$record['application'] .
'_' . $record['section']])) {
$sets[$record['application'] .
'_' . $record['section']] =
$storage->add($record['section'] . 'set',
'', $this->backup->slider['title']);
}
$this->sectionTranslation[$record['id']] =
$storage->add($record['section'],
$sets[$record['application'] . '_' .
$record['section']], $record['value']);
}
}
}
}
}PK9e�[�Qs��Conflict/Conflict.phpnu�[���<?php
namespace Nextend\SmartSlider3\Conflict;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Model\StorageSectionManager;
class Conflict {
/**
* @var Conflict
*/
private static $platformConflict;
protected $conflicts = array();
protected $debugConflicts = array();
public $curlLog = false;
/**
* @return Conflict
*/
final public static function getInstance() {
if (!isset(self::$platformConflict)) {
self::$platformConflict = new Joomla\JoomlaConflict();
}
return static::$platformConflict;
}
protected function __construct() {
$this->testPHPINIMaxInputVars();
$this->testOpcache();
$this->testApiConnection();
$this->testDatabaseTables();
$this->testGantry4();
}
public function getConflicts() {
return $this->conflicts;
}
public function getDebugConflicts() {
return $this->debugConflicts;
}
public function getCurlLog() {
return $this->curlLog;
}
protected function displayConflict($title, $description, $url =
'') {
$this->conflicts[] = '<b>' . $title .
'</b> - ' . $description . (!empty($url) ? ' <a
href="' . $url . '" target="_blank">'
. n2_('Learn more') . '</a>' : '');
$this->debugConflicts[] = $title;
}
private function testPHPINIMaxInputVars() {
if (function_exists('ini_get')) {
$max_input_vars = intval(ini_get('max_input_vars'));
if ($max_input_vars < 1000) {
$this->displayConflict('PHP',
sprintf(n2_('Increase %1$s in php.ini to 1000 or more. Current value:
%2$s'), '<b>max_input_vars</b>',
$max_input_vars),
'https://smartslider.helpscoutdocs.com/article/1717-wordpress-installation');
}
}
}
private function testOpcache() {
if (function_exists('ini_get') &&
ini_get('opcache.enable')) {
$revalidateFrequenty =
intval(ini_get('opcache.revalidate_freq'));
if ($revalidateFrequenty >= 15) {
$this->displayConflict('PHP',
sprintf(n2_('Decrease %1$s below 15 in php.ini to prevent fatal errors
on plugin updates. Current value: %2$s'),
'<b>opcache.revalidate_freq</b>',
$revalidateFrequenty),
'https://smartslider.helpscoutdocs.com/article/1717-wordpress-installation');
}
}
}
private function testApiConnection() {
$log = StorageSectionManager::getStorage('smartslider')
->get('log',
'api');
if (!empty($log)) {
if (strpos($log, 'ACTION_MISSING') === false) {
$this->displayConflict(n2_('Unable to connect to
the API'), n2_('See <b>Debug Information</b> for more
details!'));
$this->curlLog = json_decode($log, true);
}
}
}
private function testDatabaseTables() {
$tables = array(
'#__nextend2_image_storage',
'#__nextend2_section_storage',
'#__nextend2_smartslider3_generators',
'#__nextend2_smartslider3_sliders',
'#__nextend2_smartslider3_sliders_xref',
'#__nextend2_smartslider3_slides'
);
foreach ($tables as $table) {
$table = Database::parsePrefix($table);
$result = Database::queryRow('SHOW TABLES LIKE
:table', array(
":table" => $table
));
if (empty($result)) {
$this->conflicts[] = n2_('MySQL table
missing') . ': ' . $table;
$this->debugConflicts[] = n2_('MySQL table
missing') . ': ' . $table;
}
}
}
private function testGantry4() {
if (defined('GANTRY_VERSION') &&
version_compare(GANTRY_VERSION, '5', '<')) {
$this->displayConflict('Gantry 4', n2_('Your
theme uses an outdated MooTools library which is not compatible.'),
'https://wordpress.org/support/topic/mootools-overwrites-the-native-bind/');
}
}
}PK9e�[�y�H��"Conflict/Joomla/JoomlaConflict.phpnu�[���<?php
namespace Nextend\SmartSlider3\Conflict\Joomla;
use Nextend\SmartSlider3\Conflict\Conflict;
class JoomlaConflict extends Conflict {
}PK9e�[���AA$Form/Element/BackgroundAnimation.phpnu�[���<?php
namespace Nextend\SmartSlider3\Form\Element;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\Form\Element\AbstractChooser;
use Nextend\SmartSlider3\Slider\SliderType\Simple\SliderTypeSimple;
class BackgroundAnimation extends AbstractChooser {
protected function addScript() {
Js::addStaticGroup(SliderTypeSimple::getAssetsPath() .
'/dist/smartslider-backgroundanimation.min.js',
'smartslider-backgroundanimation');
Js::addInline('new
_N2.FormElementAnimationManager("' . $this->fieldID .
'", "backgroundanimationManager");');
}
}PK9e�[���pp
Form/Element/BackgroundImage.phpnu�[���<?php
namespace Nextend\SmartSlider3\Form\Element;
use Nextend\Framework\Form\Element\IconTab;
class BackgroundImage extends IconTab {
protected $relatedAttribute = 'slide-background-type';
protected function fetchElement() {
$this->options = array(
'image' => 'ssi_16 ssi_16--image',
'video' => 'ssi_16 ssi_16--video',
'color' => 'ssi_16 ssi_16--color'
);
$this->tooltips = array(
'image' => n2_('Image'),
'video' => n2_('Video'),
'color' => n2_('Color')
);
return parent::fetchElement();
}
}PK9e�[�����Form/Element/Columns.phpnu�[���<?php
namespace Nextend\SmartSlider3\Form\Element;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\Form\Element\AbstractFieldHidden;
use Nextend\Framework\View\Html;
class Columns extends AbstractFieldHidden {
protected $hasTooltip = false;
public function __construct($insertAt, $name = '', $default =
'', $parameters = array()) {
parent::__construct($insertAt, $name, false, $default,
$parameters);
}
protected function fetchElement() {
Js::addInline('new _N2.FormElementColumns("' .
$this->fieldID . '");');
return Html::tag('div', array(
'class' => 'n2_field_columns'
), Html::tag('div', array(
'class' =>
'n2_field_columns__content'
), '') . Html::tag('div', array(
'class' =>
'n2_field_columns__add',
'data-n2tip' => n2_('Add column')
), '<div class="ssi_16
ssi_16--plus"></div>') . parent::fetchElement());
}
}PK9e�[C�u166"Form/Element/ControlTypePicker.phpnu�[���<?php
namespace Nextend\SmartSlider3\Form\Element;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\Form\Container\ContainerSubform;
use Nextend\Framework\Form\ContainerInterface;
use Nextend\Framework\Form\Element\AbstractFieldHidden;
use Nextend\Framework\Form\TraitFieldset;
use Nextend\Framework\Url\Url;
use Nextend\SmartSlider3\Widget\Group\AbstractWidgetGroup;
class ControlTypePicker extends AbstractFieldHidden {
protected $hasTooltip = false;
protected $options = array();
protected $plugins = array();
protected $ajaxUrl = '';
/**
* @var ContainerSubform
*/
protected $containerSubform;
/** @var AbstractWidgetGroup */
private $widgetGroup;
/**
* SubFormIcon constructor.
*
* @param TraitFieldset $insertAt
* @param string $name
* @param ContainerInterface $container
* @param string $ajaxUrl
* @param AbstractWidgetGroup $widgetGroup
* @param string $default
* @param array $parameters
*/
public function __construct($insertAt, $name, $container, $ajaxUrl,
$widgetGroup, $default = '', $parameters = array()) {
$this->name = $name;
$this->widgetGroup = $widgetGroup;
$this->ajaxUrl = $ajaxUrl;
parent::__construct($insertAt, $name, false, $default,
$parameters);
$this->initOptions();
$this->containerSubform = new ContainerSubform($container, $name
. '-subform');
$this->getCurrentPlugin($this->getValue())
->renderFields($this->containerSubform);
}
protected function fetchElement() {
$html = '<div
class="n2_field_control_type_picker">';
foreach ($this->options as $key => $option) {
$html .= '<div
class="n2_field_control_type_picker__item"
data-controltype="' . $key . '">';
$html .= '<img alt="" src="' .
Url::pathToUri($option['path']) . '">';
$html .= '<div
class="n2_field_control_type_picker__selected_marker"><i
class="ssi_16 ssi_16--check"></i></div>';
$html .= '</div>';
}
$html .= parent::fetchElement();
$html .= '</div>';
Js::addInline('new _N2.FormElementControlTypePicker(
"' . $this->fieldID . '", ' .
json_encode(array(
'ajaxUrl' => $this->ajaxUrl,
'target' =>
$this->containerSubform->getId(),
'originalValue' => $this->getValue()
)) . ');');
return $html;
}
protected function getCurrentPlugin($value) {
if (!isset($this->plugins[$value])) {
list($value) = array_keys($this->plugins);
}
return $this->plugins[$value];
}
private function initOptions() {
$this->plugins = $this->widgetGroup->getWidgets();
foreach ($this->plugins AS $name => $type) {
$this->options[$name] = array(
'path' => $type->getSubFormImagePath()
);
}
if (count($this->options) == 1) {
$this->parent->hide();
}
}
}PK9e�[�@|�VVForm/Element/DatePicker.phpnu�[���<?php
namespace Nextend\SmartSlider3\Form\Element;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\Form\AbstractField;
use Nextend\Framework\Form\ContainerInterface;
use Nextend\Framework\Form\Element\AbstractFieldHidden;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Text\Number;
use Nextend\Framework\Form\Element\Text\NumberSlider;
use Nextend\Framework\Form\TraitFieldset;
class DatePicker extends AbstractFieldHidden implements ContainerInterface
{
use TraitFieldset;
protected $rowClass = 'n2_field_mixed ';
protected $onOffLabel = '';
public function __construct($insertAt, $name = '', $label =
false, $default = '', $parameters = array()) {
$this->onOffLabel = $label;
parent::__construct($insertAt, $name, false, $default,
$parameters);
}
protected function fetchElement() {
$this->addDatePicker();
$html = '';
$subElements = array();
$i = 0;
$element = $this->first;
while ($element) {
$element->setExposeName(false);
$html .= $this->decorateElement($element);
$subElements[$i] = $element->getID();
$i++;
$element = $element->getNext();
}
$html .= parent::fetchElement();
Js::addInline('new _N2.FormElementDatePicker("' .
$this->fieldID . '", ' . json_encode($subElements) .
');');
return $html;
}
/**
* @param AbstractField $element
*
* @return string
*/
public function decorateElement($element) {
return $this->parent->decorateElement($element);
}
protected function addDatePicker() {
$defaultParts = explode(' ', $this->defaultValue);
$defaultDateParts = explode('-', $defaultParts[0]);
$defaultTimeParts = explode(':', $defaultParts[1]);
$defaultArray = array_merge($defaultDateParts,
$defaultTimeParts);
$valueParts = explode(' ', $this->getValue());
$valueDateParts = explode('-', $valueParts[0]);
$valueTimeParts = explode(':', $valueParts[1]);
$valueArray = array_merge($valueDateParts, $valueTimeParts);
$valueArray = $valueArray + $defaultArray;
$controlName = $this->getControlName();
new OnOff($this, $this->name . '-enable',
$this->onOffLabel, 0, array(
'relatedFieldsOn' => array(
$controlName . $this->name . '-year',
$controlName . $this->name . '-month',
$controlName . $this->name . '-day',
$controlName . $this->name . '-hour',
$controlName . $this->name . '-minute'
)
));
//YEAR
new Number($this, $this->name . '-year',
n2_('Year'), $valueArray[0], array(
'wide' => 4,
'min' => 1970,
'max' => 9999
));
//MONTH
$months = array();
for ($i = 1; $i <= 12; $i++) {
$formattedValue = sprintf("%02d", $i);
$months[$formattedValue] = $formattedValue;
}
new Select($this, $this->name . '-month',
n2_('Month'), $valueArray[1], array(
'options' => $months
));
//DAY
$days = array();
for ($i = 1; $i <= 31; $i++) {
$formattedValue = sprintf("%02d", $i);
$days[$formattedValue] = $formattedValue;
}
new Select($this, $this->name . '-day',
n2_('Day'), $valueArray[2], array(
'options' => $days,
));
//HOUR
$hours = array();
for ($i = 0; $i < 24; $i++) {
$formattedValue = sprintf("%02d", $i);
$hours[$formattedValue] = $formattedValue;
}
new Select($this, $this->name . '-hour',
n2_('Hour'), $valueArray[3], array(
'options' => $hours
));
//MINUTE
new NumberSlider($this, $this->name . '-minute',
n2_('Minute'), $valueArray[4], array(
'wide' => 2,
'min' => 0,
'max' => 59
));
}
}PK9e�[�%Form/Element/Group/WidgetPosition.phpnu�[���<?php
namespace Nextend\SmartSlider3\Form\Element\Group;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\Form\Element\Grouping;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Element\Text\Number;
use Nextend\Framework\Form\Element\Unit;
use Nextend\Framework\Localization\Localization;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Form\Element\WidgetArea;
class WidgetPosition extends Grouping {
protected $rowClass = '';
protected function fetchElement() {
$mode = new OnOff($this, $this->name . '-mode',
n2_('Advanced'), 'simple');
$mode->setCustomValues('simple',
'advanced');
$mode->setRelatedFieldsOff(array(
'slider' . $this->name . '-simple'
));
$mode->setRelatedFieldsOn(array(
'slider' . $this->name . '-advanced'
));
$this->addSimple();
$this->addAdvanced();
Js::addInline('new _N2.FormElementWidgetPosition("'
. $this->fieldID . '");');
$html = '';
$element = $this->first;
while ($element) {
$html .= $this->decorateElement($element);
$element = $element->getNext();
}
return Html::tag('div', array(
'id' => $this->fieldID,
'class' => 'n2_field_widget_position'
), Html::tag('div', array(
'class' =>
'n2_field_widget_position__label'
), '') . '<i
class="n2_field_widget_position__arrow ssi_16
ssi_16--selectarrow"></i>' . Html::tag('div',
array(
'class' =>
'n2_field_widget_position__popover'
), $html));
}
protected function addSimple() {
$simple = new Grouping($this, $this->name .
'-simple');
new WidgetArea($simple, $this->name . '-area', false);
new Select($simple, $this->name . '-stack',
n2_('Stack'), 1, array(
'options' => array(
1 => 1,
2 => 2,
3 => 3,
4 => 4,
5 => 5
)
));
new Number($simple, $this->name . '-offset',
n2_('Offset'), 0, array(
'wide' => 4,
'unit' => 'px'
));
}
protected function addAdvanced() {
$advanced = new Grouping($this, $this->name .
'-advanced');
new Select($advanced, $this->name . '-horizontal',
n2_('Horizontal'), 'left', array(
'options' => array(
'left' => n2_('Left'),
'right' => n2_('Right')
)
));
$horizontalPosition = new Text($advanced, $this->name .
'-horizontal-position', n2_('Position'), 0, array(
'style' => 'width:100px;'
));
new Unit($horizontalPosition, $this->name .
'-horizontal-unit', false, 'px', array(
'units' => array(
'px',
'%'
)
));
new Select($advanced, $this->name . '-vertical',
n2_('Vertical'), 'top', array(
'options' => array(
'top' => n2_('Top'),
'bottom' => n2_('Bottom')
)
));
$verticalPosition = new Text($advanced, $this->name .
'-vertical-position', n2_('Position'), 0, array(
'style' => 'width:100px;'
));
new Unit($verticalPosition, $this->name .
'-vertical-unit', false, 'px', array(
'units' => array(
'px',
'%'
)
));
}
}PK9e�[�$zppForm/Element/PublishSlider.phpnu�[���<?php
namespace Nextend\SmartSlider3\Form\Element;
use Nextend\Framework\Form\Element\AbstractFieldHidden;
use Nextend\Framework\Request\Request;
use
Nextend\SmartSlider3\Application\Admin\Layout\Block\Slider\SliderPublish\BlockPublishSlider;
class PublishSlider extends AbstractFieldHidden {
protected $hasTooltip = false;
protected function fetchElement() {
ob_start();
$blockPublishSlider = new BlockPublishSlider($this->getForm());
$blockPublishSlider->setSliderID(Request::$GET->getInt('sliderid'));
$blockPublishSlider->display();
return ob_get_clean();
}
}PK9e�[Ѝ�P��
Form/Element/Radio/FlexAlign.phpnu�[���<?php
namespace Nextend\SmartSlider3\Form\Element\Radio;
use Nextend\Framework\Form\Element\Radio\AbstractRadioIcon;
class FlexAlign extends AbstractRadioIcon {
protected $options = array(
'flex-start' => 'ssi_16
ssi_16--verticaltop',
'center' => 'ssi_16
ssi_16--verticalcenter',
'flex-end' => 'ssi_16
ssi_16--verticalbottom',
'space-between' => 'ssi_16
ssi_16--verticalbetween',
'space-around' => 'ssi_16
ssi_16--verticalaround'
);
}PK9e�[h|Cu��&Form/Element/Radio/HorizontalAlign.phpnu�[���<?php
namespace Nextend\SmartSlider3\Form\Element\Radio;
use Nextend\Framework\Form\Element\Radio\AbstractRadioIcon;
class HorizontalAlign extends AbstractRadioIcon {
protected $inherit = false;
protected $options = array(
'left' => 'ssi_16 ssi_16--horizontalleft',
'center' => 'ssi_16
ssi_16--horizontalcenter',
'right' => 'ssi_16 ssi_16--horizontalright'
);
public function __construct($insertAt, $name = '', $label =
'', $default = '', array $parameters = array()) {
parent::__construct($insertAt, $name, $label, $default,
$parameters);
if ($this->inherit) {
$this->options = array(
'inherit' => 'ssi_16
ssi_16--none'
) + $this->options;
}
}
/**
* @param bool $inherit
*/
public function setInherit($inherit) {
$this->inherit = $inherit;
}
}PK9e�[��J�!Form/Element/Radio/InnerAlign.phpnu�[���<?php
namespace Nextend\SmartSlider3\Form\Element\Radio;
use Nextend\Framework\Form\Element\Radio\AbstractRadioIcon;
class InnerAlign extends AbstractRadioIcon {
protected $hasInherit = true;
protected function renderOptions() {
if ($this->hasInherit) {
$this->options['inherit'] = 'ssi_16
ssi_16--none';
}
$this->options = array_merge($this->options, array(
'left' => 'ssi_16 ssi_16--textleft',
'center' => 'ssi_16 ssi_16--textcenter',
'right' => 'ssi_16 ssi_16--textright'
));
return parent::renderOptions();
}
/**
* @param bool $hasInherit
*/
public function setHasInherit($hasInherit) {
$this->hasInherit = $hasInherit;
}
}PK9e�[���ll$Form/Element/Radio/VerticalAlign.phpnu�[���<?php
namespace Nextend\SmartSlider3\Form\Element\Radio;
use Nextend\Framework\Form\Element\Radio\AbstractRadioIcon;
class VerticalAlign extends AbstractRadioIcon {
protected $options = array(
'top' => 'ssi_16 ssi_16--verticaltop',
'middle' => 'ssi_16 ssi_16--verticalcenter',
'bottom' => 'ssi_16 ssi_16--verticalbottom'
);
}PK9e�[t�S+��-Form/Element/Select/ResponsiveSubFormIcon.phpnu�[���<?php
namespace Nextend\SmartSlider3\Form\Element\Select;
use Nextend\Framework\Form\Element\Select\SubFormIcon;
use Nextend\SmartSlider3\Slider\ResponsiveType\AbstractResponsiveTypeAdmin;
use Nextend\SmartSlider3\Slider\ResponsiveType\ResponsiveTypeFactory;
class ResponsiveSubFormIcon extends SubFormIcon {
/** @var AbstractResponsiveTypeAdmin[] */
protected $plugins = array();
protected function loadOptions() {
$this->plugins = ResponsiveTypeFactory::getAdminTypes();
foreach ($this->plugins AS $name => $type) {
$this->options[$name] = array(
'label' => $type->getLabel(),
'icon' => $type->getIcon()
);
}
}
}PK9e�[��K%//Form/Element/WidgetArea.phpnu�[���<?php
namespace Nextend\SmartSlider3\Form\Element;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\Form\Element\AbstractFieldHidden;
use Nextend\Framework\View\Html;
class WidgetArea extends AbstractFieldHidden {
protected $hasTooltip = false;
protected function fetchElement() {
$areas = '';
for ($i = 1; $i <= 12; $i++) {
$areas .= Html::tag('div', array(
'class' =>
'n2_field_widget_area__area' . $this->isSelected($i),
'data-area' => $i
));
}
$html = Html::tag('div', array(
'class' => 'n2_field_widget_area'
), Html::tag('div', array(
'class' =>
'n2_field_widget_area__inner'
)) . $areas . parent::fetchElement());
Js::addInline('new
_N2.FormElementSliderWidgetArea("' . $this->fieldID .
'");');
return $html;
}
function isSelected($i) {
if ($i == $this->getValue()) {
return ' n2_field_widget_area__area--selected';
}
return '';
}
}PK9e�[�� �
�
Generator/AbstractGenerator.phpnu�[���<?php
namespace Nextend\SmartSlider3\Generator;
use Nextend\Framework\Data\Data;
use Nextend\Framework\Form\ContainerInterface;
use Nextend\SmartSlider3\Platform\WordPress\Shortcode\Shortcode;
abstract class AbstractGenerator {
protected $name = '';
protected $label = '';
protected $layout = '';
/** @var AbstractGeneratorGroup */
protected $group;
/** @var Data */
protected $data;
/**
*
* @param AbstractGeneratorGroup $group
* @param string $name
* @param string $label
*/
public function __construct($group, $name, $label) {
$this->group = $group;
$this->name = $name;
$this->label = $label;
$this->group->addSource($name, $this);
}
/**
*
* @param ContainerInterface $container
*/
public function renderFields($container) {
}
public function setData($data) {
$this->data = $data;
}
public final function getData($slides, $startIndex, $group) {
$this->resetState();
$data = array();
$linearData = $this->_getData($slides * $group, $startIndex -
1);
if ($linearData != null) {
$keys = array();
for ($i = 0; $i < count($linearData); $i++) {
$keys = array_merge($keys, array_keys($linearData[$i]));
}
$columns = array_fill_keys($keys, '');
for ($i = 0; $i < count($linearData); $i++) {
$firstIndex = intval($i / $group);
if (!isset($data[$firstIndex])) {
$data[$firstIndex] = array();
}
$data[$firstIndex][$i % $group] = array_merge($columns,
$linearData[$i]);
}
if (count($data) && count($data[count($data) - 1]) !=
$group) {
if (count($data) - 1 == 0 &&
count($data[count($data) - 1]) > 0) {
while (count($data[0]) < $group) {
$data[0][] = $columns;
}
} else {
array_pop($data);
}
}
}
return $data;
}
protected function resetState() {
}
protected abstract function _getData($count, $startIndex);
function makeClickableLinks($s) {
return
preg_replace('@(https?://([-\w\.]+[-\w])+(:\d+)?(/([\w/_\.#-]*(\?\S+)?[^\.\s])?)?)@',
'<a href="$1"
target="_blank">$1</a>', $s);
}
protected function getIDs($field = 'ids') {
return array_map('intval', explode("\n",
str_replace(array(
"\r\n",
"\n\r",
"\r"
), "\n", $this->data->get($field))));
}
public function filterName($name) {
return $name;
}
public function hash($key) {
return md5($key);
}
public static function cacheKey($params) {
return '';
}
/**
* @return string
*/
public function getLabel() {
return $this->label;
}
/**
* @return string
*/
public function getDescription() {
return n2_('No description.');
}
/**
* @return string
*/
public function getLayout() {
return $this->layout;
}
/**
* @return string
*/
public function getName() {
return $this->name;
}
/**
* @return AbstractGeneratorGroup
*/
public function getGroup() {
return $this->group;
}
}PK9e�[*
�*e
e
$Generator/AbstractGeneratorGroup.phpnu�[���<?php
namespace Nextend\SmartSlider3\Generator;
use Nextend\Framework\Pattern\GetAssetsPathTrait;
use Nextend\Framework\Url\Url;
abstract class AbstractGeneratorGroup {
use GetAssetsPathTrait;
protected $name = '';
/** @var AbstractGeneratorGroupConfiguration */
protected $configuration;
protected $needConfiguration = false;
protected $url = '';
/** @var AbstractGenerator[] */
protected $sources = array();
protected $isLoaded = false;
protected $isDeprecated = false;
public function __construct() {
GeneratorFactory::addGenerator($this);
}
/**
* @return AbstractGeneratorGroup $this
*/
public function load() {
if (!$this->isLoaded) {
if ($this->isInstalled()) {
$this->loadSources();
}
$this->isLoaded = true;
}
return $this;
}
protected abstract function loadSources();
public function addSource($name, $source) {
$this->sources[$name] = $source;
}
/**
* @param $name
*
* @return false|AbstractGenerator
*/
public function getSource($name) {
if (!isset($this->sources[$name])) {
return false;
}
return $this->sources[$name];
}
/**
* @return AbstractGenerator[]
*/
public function getSources() {
return $this->sources;
}
public function hasConfiguration() {
return !!$this->configuration;
}
/**
* @return AbstractGeneratorGroupConfiguration
*/
public function getConfiguration() {
return $this->configuration;
}
/**
* @return string
*
*/
public abstract function getLabel();
/**
* @return string
*/
public function getDescription() {
return n2_('No description.');
}
/**
* @return string
*/
public function getName() {
return $this->name;
}
/**
* @return string
*/
public function getError() {
return n2_('Generator not found');
}
/**
* @return string
*/
public function getDocsLink() {
return
'https://smartslider.helpscoutdocs.com/article/1999-dynamic-slides';
}
public function isInstalled() {
return true;
}
/**
* @return string
*/
public function getUrl() {
return $this->url;
}
public function getImageUrl() {
return Url::pathToUri(self::getAssetsPath() .
'/dynamic.png');
}
/**
* @return bool
*/
public function isDeprecated() {
return $this->isDeprecated;
}
}PK9e�[�=��771Generator/AbstractGeneratorGroupConfiguration.phpnu�[���<?php
namespace Nextend\SmartSlider3\Generator;
use Nextend\Framework\Pattern\MVCHelperTrait;
abstract class AbstractGeneratorGroupConfiguration {
/** @var AbstractGeneratorGroup */
protected $generatorGroup;
/**
* AbstractGeneratorGroupConfiguration constructor.
*
* @param AbstractGeneratorGroup $generatorGroup
*/
public function __construct($generatorGroup) {
$this->generatorGroup = $generatorGroup;
}
/**
* @return bool
*/
public abstract function wellConfigured();
/**
* @return array
*/
public abstract function getData();
/**
* @param $data
* @param bool $store
*/
public abstract function addData($data, $store = true);
/**
* @param MVCHelperTrait $MVCHelper
*/
public abstract function render($MVCHelper);
/**
* @param MVCHelperTrait $MVCHelper
*/
public abstract function startAuth($MVCHelper);
/**
* @param MVCHelperTrait $MVCHelper
*/
public abstract function finishAuth($MVCHelper);
}PK9e�[�O���%Generator/AbstractGeneratorLoader.phpnu�[���<?php
namespace Nextend\SmartSlider3\Generator;
use Nextend\Framework\Filesystem\Filesystem;
use ReflectionClass;
use ReflectionException;
abstract class AbstractGeneratorLoader {
public function __construct() {
try {
$reflectionClass = new ReflectionClass($this);
$namespace = $reflectionClass->getNamespaceName();
$dir = dirname($reflectionClass->getFileName());
foreach (Filesystem::folders($dir) AS $name) {
$className = '\\' . $namespace . '\\' .
$name . '\\GeneratorGroup' . $name;
if (class_exists($className)) {
new $className;
}
}
} catch (ReflectionException $e) {
}
}
}PK9e�[\��0��*Generator/Common/GeneratorCommonLoader.phpnu�[���<?php
namespace Nextend\SmartSlider3\Generator\Common;
use Nextend\SmartSlider3\Generator\AbstractGeneratorLoader;
class GeneratorCommonLoader extends AbstractGeneratorLoader {
}PK9e�[ۏo��Generator/Generator.phpnu�[���<?php
namespace Nextend\SmartSlider3\Generator;
use Nextend\Framework\Data\Data;
use Nextend\Framework\Notification\Notification;
use Nextend\SmartSlider3\Application\Model\ModelGenerator;
use Nextend\SmartSlider3\Slider\Cache\CacheGenerator;
use Nextend\SmartSlider3\Slider\Slide;
use Nextend\SmartSlider3\Slider\Slider;
class Generator {
private static $localCache = array();
/**
* @var Slide
*/
private $slide;
private $generatorModel;
public $currentGenerator;
private $slider;
/** @var AbstractGenerator */
private $dataSource;
/**
* @param Slide $slide
* @param Slider $slider
* @param $extend
*/
public function __construct($slide, $slider, $extend) {
$this->slide = $slide;
$this->slider = $slider;
$this->generatorModel = new ModelGenerator($slider);
$this->currentGenerator =
$this->generatorModel->get($this->slide->generator_id);
$this->currentGenerator['params'] = new
Data($this->currentGenerator['params'], true);
if (isset($extend[$this->slide->generator_id])) {
$extend = new Data($extend[$this->slide->generator_id]);
$slide->parameters->set('record-slides',
$extend->get('record-slides', 1));
$extend->un_set('record-slides');
$this->currentGenerator['params']->loadArray($extend->toArray());
}
}
public function getSlides() {
$slides = array();
$data = $this->getData();
for ($i = 0; $i < count($data); $i++) {
$newSlide = clone $this->slide;
$newSlide->setVariables($data[$i]);
if ($i > 0) {
$newSlide->unique = $i;
}
$slides[] = $newSlide;
}
if (count($slides) == 0) {
$slides = null;
}
return $slides;
}
public function getSlidesAdmin() {
$slides = array();
$data = $this->getData();
for ($i = 0; $i < count($data); $i++) {
$newSlide = clone $this->slide;
$newSlide->setVariables($data[$i]);
if ($i > 0) {
$newSlide->unique = $i;
}
$slides[] = $newSlide;
}
if (count($slides) == 0) {
$slides[] = $this->slide;
}
return $slides;
}
public function fillSample() {
$data = $this->getData();
if (count($data) > 0) {
$this->slide->setVariables($data[0]);
}
}
/**
* @return bool|false|AbstractGenerator
*/
public function getSource() {
$generatorGroup =
$this->generatorModel->getGeneratorGroup($this->currentGenerator['group']);
if (!$generatorGroup) {
Notification::notice(n2_('Generator group not
found'). ': ' .
$this->currentGenerator['group']);
return false;
}
$source =
$generatorGroup->getSource($this->currentGenerator['type']);
if (!$source) {
Notification::notice(n2_('Generator type not found').
': ' . $this->currentGenerator['type']);
return false;
}
return $source;
}
private function getData() {
if (!isset(self::$localCache[$this->slide->generator_id])) {
$this->slider->manifestData['generator'][] =
array(
$this->currentGenerator['group'],
$this->currentGenerator['type'],
$this->currentGenerator['params']->toArray()
);
$generatorGroup =
$this->generatorModel->getGeneratorGroup($this->currentGenerator['group']);
if (!$generatorGroup) {
return array();
}
$this->dataSource =
$generatorGroup->getSource($this->currentGenerator['type']);
if ($this->dataSource) {
$this->dataSource->setData($this->currentGenerator['params']);
$cache = new CacheGenerator($this->slider, $this);
$name =
$this->dataSource->filterName('generator' .
$this->currentGenerator['id']);
self::$localCache[$this->slide->generator_id] =
$cache->makeCache($name,
$this->dataSource->hash(json_encode($this->currentGenerator) .
max($this->slide->parameters->get('record-slides'), 1)),
array(
$this,
'getNotCachedData'
));
} else {
self::$localCache[$this->slide->generator_id] =
array();
Notification::error(sprintf(n2_('%1$s generator
missing the following source: %2$s'), $generatorGroup->getLabel(),
$this->currentGenerator['type']));
}
}
return self::$localCache[$this->slide->generator_id];
}
public function getNotCachedData() {
return
$this->dataSource->getData(max($this->slide->parameters->get('record-slides'),
1),
max($this->currentGenerator['params']->get('record-start'),
1), $this->getSlideGroup());
}
public function setNextCacheRefresh($time) {
$this->slide->setNextCacheRefresh($time);
}
public function getSlideCount() {
return
max($this->slide->parameters->get('record-slides'), 1);
}
public function getSlideGroup() {
return
max($this->currentGenerator['params']->get('record-group'),
1);
}
public function getSlideStat() {
return count($this->getData()) . '/' .
$this->getSlideCount();
}
}PK9e�[�:�Q''Generator/GeneratorFactory.phpnu�[���<?php
namespace Nextend\SmartSlider3\Generator;
use Nextend\Framework\Pattern\PluggableTrait;
use Nextend\Framework\Pattern\SingletonTrait;
class GeneratorFactory {
use PluggableTrait, SingletonTrait;
/** @var AbstractGeneratorGroup[] */
private static $generators = array();
protected function init() {
$this->makePluggable('SliderGenerator');
}
/**
* @param AbstractGeneratorGroup $generator
*/
public static function addGenerator($generator) {
self::$generators[$generator->getName()] = $generator;
}
public static function getGenerators() {
foreach (self::$generators AS $generator) {
$generator->load();
}
return self::$generators;
}
/**
* @param $name
*
* @return AbstractGeneratorGroup|false
*/
public static function getGenerator($name) {
if (!isset(self::$generators[$name])) {
return false;
}
return self::$generators[$name]->load();
}
}
GeneratorFactory::getInstance();PK9e�[㜆.��*Generator/Joomla/GeneratorJoomlaLoader.phpnu�[���<?php
namespace Nextend\SmartSlider3\Generator\Joomla;
use Nextend\SmartSlider3\Generator\AbstractGeneratorLoader;
class GeneratorJoomlaLoader extends AbstractGeneratorLoader {
}PK9e�[�����EGenerator/Joomla/JoomlaContent/Elements/JoomlaContentAccessLevels.phpnu�[���<?php
namespace Nextend\SmartSlider3\Generator\Joomla\JoomlaContent\Elements;
use JFactory;
use Nextend\Framework\Form\Element\Select;
class JoomlaContentAccessLevels extends Select {
public function __construct($insertAt, $name = '', $label =
'', $default = '', $parameters = array()) {
parent::__construct($insertAt, $name, $label, $default,
$parameters);
$db = JFactory::getDBO();
$query = 'SELECT
m.id,
m.title AS name,
m.title,
m.ordering
FROM #__viewlevels m
ORDER BY m.ordering';
$db->setQuery($query);
$menuItems = $db->loadObjectList();
$this->options['0'] = n2_('All');
if (count($menuItems)) {
foreach ($menuItems AS $option) {
$this->options[$option->id] = $option->name;
}
}
}
}
PK9e�[/[��HHCGenerator/Joomla/JoomlaContent/Elements/JoomlaContentCategories.phpnu�[���<?php
namespace Nextend\SmartSlider3\Generator\Joomla\JoomlaContent\Elements;
use JFactory;
use JHTML;
use Nextend\Framework\Form\Element\Select;
class JoomlaContentCategories extends Select {
public function __construct($insertAt, $name = '', $label =
'', $default = '', $parameters = array()) {
parent::__construct($insertAt, $name, $label, $default,
$parameters);
$db = JFactory::getDBO();
$query = 'SELECT
id,
title AS name,
title,
parent_id AS parent,
parent_id
FROM #__categories
WHERE published = 1 AND extension = "com_content"
ORDER BY lft';
$db->setQuery($query);
$menuItems = $db->loadObjectList();
$children = array();
if ($menuItems) {
foreach ($menuItems as $v) {
$pt = $v->parent_id;
$list = isset($children[$pt]) ? $children[$pt] : array();
array_push($list, $v);
$children[$pt] = $list;
}
}
$this->options[0] = n2_('All');
jimport('joomla.html.html.menu');
$options = JHTML::_('menu.treerecurse', 1, '',
array(), $children, 9999, 0, 0);
if (count($options)) {
foreach ($options AS $option) {
$this->options[$option->id] = $option->treename;
}
}
if ($this->getValue() == '') {
reset($this->options);
$this->setValue(key($this->options));
}
}
}
PK9e�[
dm�00=Generator/Joomla/JoomlaContent/Elements/JoomlaContentTags.phpnu�[���<?php
namespace Nextend\SmartSlider3\Generator\Joomla\JoomlaContent\Elements;
use JFactory;
use Nextend\Framework\Form\Element\Select;
class JoomlaContentTags extends Select {
public function __construct($insertAt, $name = '', $label =
'', $default = '', $parameters = array()) {
parent::__construct($insertAt, $name, $label, $default,
$parameters);
$db = JFactory::getDBO();
$query = 'SELECT id, title FROM #__tags WHERE published = 1
ORDER BY id';
$db->setQuery($query);
$menuItems = $db->loadObjectList();
$this->options['0'] = n2_('All');
if (count($menuItems)) {
array_shift($menuItems);
foreach ($menuItems AS $option) {
$this->options[$option->id] = $option->title;
}
}
}
}
PK9e�[����"">Generator/Joomla/JoomlaContent/GeneratorGroupJoomlaContent.phpnu�[���<?php
namespace Nextend\SmartSlider3\Generator\Joomla\JoomlaContent;
use Nextend\SmartSlider3\Generator\AbstractGeneratorGroup;
use
Nextend\SmartSlider3\Generator\Joomla\JoomlaContent\Sources\JoomlaContentArticle;
use
Nextend\SmartSlider3\Generator\Joomla\JoomlaContent\Sources\JoomlaContentCategory;
class GeneratorGroupJoomlaContent extends AbstractGeneratorGroup {
protected $name = 'joomlacontent';
public function getLabel() {
return n2_('Joomla articles');
}
public function getDescription() {
return n2_('Creates slides from your Joomla articles or
categories.');
}
protected function loadSources() {
new JoomlaContentArticle($this, 'article',
n2_('Article'));
new JoomlaContentCategory($this, 'category',
n2_('Category'));
}
}PK9e�[�wȞ�A�A?Generator/Joomla/JoomlaContent/Sources/JoomlaContentArticle.phpnu�[���<?php
namespace Nextend\SmartSlider3\Generator\Joomla\JoomlaContent\Sources;
use ContentHelperRoute;
use DateTime;
use DateTimeZone;
use JFactory;
use JPluginHelper;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\MixedField\GeneratorOrder;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Select\Filter;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Element\Text\Number;
use Nextend\Framework\Form\Element\Textarea;
use Nextend\Framework\Parser\Common;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\Framework\Url\Url;
use Nextend\SmartSlider3\Generator\AbstractGenerator;
use
Nextend\SmartSlider3\Generator\Joomla\JoomlaContent\Elements\JoomlaContentAccessLevels;
use
Nextend\SmartSlider3\Generator\Joomla\JoomlaContent\Elements\JoomlaContentCategories;
use
Nextend\SmartSlider3\Generator\Joomla\JoomlaContent\Elements\JoomlaContentTags;
use Nextend\SmartSlider3\Platform\Joomla\ImageFallback;
use Nextend\SmartSlider3\Platform\Joomla\JoomlaShim;
use Nextend\SmartSlider3\Slider\Slider;
use stdClass;
JoomlaShim::loadComContentRoute();
class JoomlaContentArticle extends AbstractGenerator {
protected $layout = 'article';
public function getDescription() {
return n2_('Creates slides from your Joomla articles in the
selected categories.');
}
public function renderFields($container) {
parent::renderFields($container);
$filterGroup = new ContainerTable($container, 'filter',
n2_('Filter'));
$source = $filterGroup->createRow('source-row');
new JoomlaContentCategories($source, 'sourcecategories',
n2_('Category'), 0, array(
'isMultiple' => true
));
new JoomlaContentTags($source, 'sourcetags',
n2_('Tags'), 0, array(
'isMultiple' => true
));
new JoomlaContentAccessLevels($source,
'sourceaccesslevels', 'Access level', 0, array(
'isMultiple' => true
));
$limit = $filterGroup->createRow('limit-row');
new Filter($limit, 'sourcefeatured',
n2_('Featured'), 0);
new Number($limit, 'sourceuserid', n2_('User
ID'), '');
new Text($limit, 'sourcearticleids', 'Included
article IDs', '');
new Text($limit, 'sourcearticleidsexcluded',
'Excluded article ids', '');
new Text($limit, 'sourcelanguage',
n2_('Language'), '*');
$variables = $filterGroup->createRow('variables-row');
new OnOff($variables, 'sourcefields', 'Fields',
0, array(
'tipLabel' => n2_('Extra
variables'),
'tipDescription' => n2_('Turn on these
options to generate more variables for the slides.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1864-joomla-articles-generator#fields'
));
new OnOff($variables, 'sourcetagvariables',
'Tags', 0, array(
'tipLabel' => n2_('Extra
variables'),
'tipDescription' => n2_('Turn on these
options to generate more variables for the slides.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1864-joomla-articles-generator#tags-19'
));
$date = $filterGroup->createRow('date-row');
new Text($date, 'sourcedateformat', n2_('Date
format'), n2_('m-d-Y'));
new Text($date, 'sourcetimeformat', n2_('Time
format'), 'G:i');
new Textarea($date, 'sourcetranslatedate',
n2_('Translate date and time'),
'January->January||February->February||March->March',
array(
'width' => 300,
'height' => 100
));
$orderGroup = new ContainerTable($container,
'order-group', n2_('Order'));
$order = $orderGroup->createRow('order-row');
new GeneratorOrder($order, 'joomlaorder',
'con.created|*|desc', array(
'options' => array(
'' => n2_('None'),
'con.title' => n2_('Title'),
'cat_title' =>
n2_('Category'),
'created_by_alias' => n2_('User
name'),
'con.featured' =>
n2_('Featured'),
'con.ordering' =>
n2_('Ordering'),
'con.hits' => n2_('Hits'),
'con.created' => n2_('Creation
time'),
'con.modified' => n2_('Modification
time'),
'con.publish_up' => n2_('Publish
time'),
'cf.ordering' => n2_('Featured
article ordering')
)
));
}
public function datify($date, $format) {
$config = JFactory::getConfig();
$timezone = new DateTimeZone($config->get('offset'));
$offset = $timezone->getOffset(new DateTime);
$result = date($format, strtotime($date) + $offset);
return $result;
}
private function translate($from, $translate) {
if (!empty($translate) && !empty($from)) {
foreach ($translate as $key => $value) {
$from = str_replace($key, $value, $from);
}
}
return $from;
}
protected function _getData($count, $startIndex) {
$db = JFactory::getDbo();
$categories = array_map('intval', explode('||',
$this->data->get('sourcecategories', '')));
$tags = array_map('intval', explode('||',
$this->data->get('sourcetags', '0')));
$query = 'SELECT ';
$query .= 'con.id, ';
$query .= 'con.title, ';
$query .= 'con.alias, ';
$query .= 'con.introtext, ';
$query .= 'con.fulltext, ';
$query .= 'con.created, ';
$query .= 'con.catid, ';
$query .= 'cat.title AS cat_title, ';
$query .= 'cat.alias AS cat_alias, ';
$query .= 'con.created_by, con.state, con.metadata, ';
$query .= 'con.created_by_alias AS con_created_by_alias,
';
$query .= 'usr.name AS created_by_alias, ';
$query .= 'con.images, ';
$query .= 'con.publish_up, ';
$query .= 'con.urls, ';
$query .= 'con.attribs ';
$query .= 'FROM #__content AS con ';
$query .= 'LEFT JOIN #__users AS usr ON usr.id =
con.created_by ';
$query .= 'LEFT JOIN #__categories AS cat ON cat.id =
con.catid ';
$query .= 'LEFT JOIN #__content_frontpage AS cf ON
cf.content_id = con.id ';
$jNow = JFactory::getDate();
$now = $jNow->toSql();
$where = array(
'con.state = 1 ',
"(con.publish_up IS NULL OR con.publish_up =
'0000-00-00 00:00:00' OR con.publish_up < '" . $now
. "') AND (con.publish_down IS NULL OR con.publish_down =
'0000-00-00 00:00:00' OR con.publish_down > '" .
$now . "') "
);
if (!in_array(0, $categories)) {
$where[] = 'con.catid IN (' . implode(',',
$categories) . ') ';
}
if (!in_array(0, $tags)) {
$where[] = 'con.id IN (SELECT content_item_id FROM
#__contentitem_tag_map WHERE type_alias = \'com_content.article\'
AND tag_id IN (' . implode(',', $tags) . ')) ';
}
$sourceUserID =
intval($this->data->get('sourceuserid', ''));
if ($sourceUserID) {
$where[] = 'con.created_by = ' . $sourceUserID .
' ';
}
switch ($this->data->get('sourcefeatured', 0)) {
case 1:
$where[] = 'con.featured = 1 ';
break;
case -1:
$where[] = 'con.featured = 0 ';
break;
}
$language = explode(",",
$this->data->get('sourcelanguage', '*'));
if (!empty($language[0]) && $language[0] != '*')
{
$where[] = 'con.language IN (' .
implode(",", $db->quote($language)) . ') ';
}
$articleIds = $this->data->get('sourcearticleids',
'');
if (!empty($articleIds)) {
$where[] = 'con.id IN (' . $articleIds . ')
';
}
$articleIdsExcluded =
$this->data->get('sourcearticleidsexcluded', '');
if (!empty($articleIdsExcluded)) {
$where[] = 'con.id NOT IN (' . $articleIdsExcluded .
') ';
}
$accessLevels = explode('||',
$this->data->get('sourceaccesslevels', '*'));
if (!in_array(0, $accessLevels)) {
$where[] = 'con.access IN (' . implode(",",
$accessLevels) . ')';
}
if (count($where) > 0) {
$query .= 'WHERE ' . implode(' AND ',
$where) . ' ';
}
$order =
Common::parse($this->data->get('joomlaorder',
'con.created|*|desc'));
if ($order[0]) {
$query .= 'ORDER BY ' . $order[0] . ' ' .
$order[1] . ' ';
}
$query .= 'LIMIT ' . $startIndex . ', ' .
$count;
$db->setQuery($query);
$result = $db->loadAssocList();
$sourceTranslate =
$this->data->get('sourcetranslatedate', '');
$translateValue = explode('||', $sourceTranslate);
$translate = array();
if ($sourceTranslate !=
'January->January||February->February||March->March'
&& !empty($translateValue)) {
foreach ($translateValue as $tv) {
$translateArray = explode('->', $tv);
if (!empty($translateArray) &&
count($translateArray) == 2) {
$translate[$translateArray[0]] = $translateArray[1];
}
}
}
JPluginHelper::importPlugin('content');
$uri = Url::getBaseUri();
$data = array();
$idArray = array();
for ($i = 0; $i < count($result); $i++) {
$idArray[$i] = $result[$i]['id'];
$r = array(
'title' => $result[$i]['title']
);
$article = new stdClass();
$article->text =
Slider::removeShortcode($result[$i]['introtext']);
$_p = array();
JoomlaShim::triggerEvent('onContentPrepare', array(
'com_smartslider3',
&$article,
&$_p,
0
));
if (!empty($article->text)) {
$r['description'] = $article->text;
}
$article->text = $result[$i]['fulltext'];
$_p = array();
JoomlaShim::triggerEvent('onContentPrepare', array(
'com_smartslider3',
&$article,
&$_p,
0
));
if (!empty($article->text)) {
$result[$i]['fulltext'] = $article->text;
if (!isset($r['description'])) {
$r['description'] =
$result[$i]['fulltext'];
} else {
$r['fulltext'] =
$result[$i]['fulltext'];
}
}
$images = (array)json_decode($result[$i]['images'],
true);
$r['image'] = $r['thumbnail'] =
ImageFallback::fallback(array(
@$images['image_intro'],
@$images['image_fulltext']
), array(
@$r['description']
));
$r += array(
'url' =>
ContentHelperRoute::getArticleRoute($result[$i]['id'] .
':' . $result[$i]['alias'],
$result[$i]['catid'] . ':' .
$result[$i]['cat_alias']),
'url_label' => n2_('View
article'),
'category_list_url' =>
'index.php?option=com_content&view=category&id=' .
$result[$i]['catid'],
'category_blog_url' =>
'index.php?option=com_content&view=category&layout=blog&id='
. $result[$i]['catid'],
'fulltext_image' =>
ImageFallback::fallback(array(@$images['image_fulltext'])),
'category_title' =>
$result[$i]['cat_title'],
'created_by' =>
$result[$i]['created_by_alias'],
'con_created_by' =>
$result[$i]['con_created_by_alias'],
'id' =>
$result[$i]['id'],
'created_date' =>
$this->translate($this->datify($result[$i]['created'],
$this->data->get('sourcedateformat',
n2_('m-d-Y'))), $translate),
'created_time' =>
$this->translate($this->datify($result[$i]['created'],
$this->data->get('sourcetimeformat', 'G:i')),
$translate),
'publish_up_date' =>
$this->translate($this->datify($result[$i]['publish_up'],
$this->data->get('sourcedateformat',
n2_('m-d-Y'))), $translate),
'publish_up_time' =>
$this->translate($this->datify($result[$i]['publish_up'],
$this->data->get('sourcetimeformat', 'G:i')),
$translate),
);
if (!empty($images)) {
$r += $images;
}
$urls = json_decode($result[$i]['urls'], true);
if (!empty($urls['urla'])) {
$r['urla'] = $urls['urla'];
$r['urlatext'] = $urls['urlatext'];
}
if (!empty($urls['urlb'])) {
$r['urlb'] = $urls['urlb'];
$r['urlbtext'] = $urls['urlbtext'];
}
if (!empty($urls['urlc'])) {
$r['urlc'] = $urls['urlc'];
$r['urlctext'] = $urls['urlctext'];
}
$metadata = json_decode($result[$i]['metadata']);
foreach ($metadata as $metakey => $metavalue) {
$r[$metakey] = $metavalue;
}
$attribs = (array)json_decode($result[$i]['attribs'],
true);
foreach ($attribs as $attrib => $value) {
if (!empty($value) && is_string($value)) {
$r[$attrib] = $value;
}
}
if (isset($r['helix_ultimate_image'])) {
$r['spfeatured_image'] =
$r['helix_ultimate_image'] = '$/' .
$r['helix_ultimate_image'];
}
if (isset($r['helix_ultimate_gallery'])) {
$gallery =
(array)json_decode($r['helix_ultimate_gallery'], true);
for ($j = 0; $j <
count($gallery["helix_ultimate_gallery_images"]); $j++) {
$r['helix_ultimate_gallery_images_' . $j] =
$r['spgallery_' . $j] = '$/' .
$gallery["helix_ultimate_gallery_images"][$j];
}
}
$data[] = $r;
}
if (!empty($idArray)) {
if ($this->data->get('sourcetagvariables', 0))
{
$query = 'SELECT t.title, c.content_item_id FROM
#__tags AS t
LEFT JOIN #__contentitem_tag_map AS c ON t.id = c.tag_id
WHERE t.id IN (SELECT tag_id FROM #__contentitem_tag_map WHERE
type_alias = \'com_content.article\' AND content_item_id IN
(' . implode(',', $idArray) . '))';
$db->setQuery($query);
$result = $db->loadAssocList();
$tags = array();
$articles = array();
foreach ($result as $r) {
$tags[$r['content_item_id']][] =
$r['title'];
$articles[] =
$r['content_item_id'];
}
for ($i = 0; $i < count($data); $i++) {
if (in_array($data[$i]['id'], $articles)) {
$j = 1;
foreach ($tags[$data[$i]['id']] as $tag)
{
$data[$i]['tag' . $j] = $tag;
$j++;
}
}
}
}
if ($this->data->get('sourcefields', 0)) {
$query = "SELECT fv.value, fv.item_id, f.title, f.type
FROM #__fields_values AS fv LEFT JOIN #__fields AS f ON fv.field_id = f.id
WHERE fv.item_id IN (" . implode(',', $idArray) .
")";
$db->setQuery($query);
$result = $db->loadAssocList();
$AllResult = array();
foreach ($result as $r) {
if ($r['type'] == 'media') {
$r['value'] =
ResourceTranslator::urlToResource($uri . "/" .
$r["value"]);
}
$r['title'] =
htmlentities($r['title']);
$keynum = 2;
while
(isset($AllResult[$r['item_id']][$r['title']])) {
$r['title'] = $r['title'] .
$keynum;
$keynum++;
}
$AllResult[$r['item_id']][$r['title']] =
$r['value'];
}
for ($i = 0; $i < count($data); $i++) {
if (isset($AllResult[$data[$i]['id']])) {
foreach ($AllResult[$data[$i]['id']] as
$key => $value) {
$key =
preg_replace('/[^a-zA-Z0-9_\x7f-\xff]*/', '', $key);
$data[$i][$key] = $value;
}
}
}
}
}
return $data;
}
}PK9e�[�g�ss@Generator/Joomla/JoomlaContent/Sources/JoomlaContentCategory.phpnu�[���<?php
namespace Nextend\SmartSlider3\Generator\Joomla\JoomlaContent\Sources;
use JPluginHelper;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\MixedField\GeneratorOrder;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Parser\Common;
use Nextend\SmartSlider3\Generator\AbstractGenerator;
use
Nextend\SmartSlider3\Generator\Joomla\JoomlaContent\Elements\JoomlaContentCategories;
use
Nextend\SmartSlider3\Generator\Joomla\JoomlaContent\Elements\JoomlaContentTags;
use Nextend\SmartSlider3\Platform\Joomla\ImageFallback;
use Nextend\SmartSlider3\Platform\Joomla\JoomlaShim;
use Nextend\SmartSlider3\Slider\Slider;
use stdClass;
class JoomlaContentCategory extends AbstractGenerator {
protected $layout = 'article';
public function getDescription() {
return n2_('Creates slides from your Joomla categories. (Not
the articles inside them.)');
}
public function renderFields($container) {
parent::renderFields($container);
$filterGroup = new ContainerTable($container, 'filter',
n2_('Filter'));
$source = $filterGroup->createRow('source-row');
new JoomlaContentCategories($source, 'sourcecategory',
n2_('Parent category'), 0);
new JoomlaContentTags($source, 'sourcetags',
n2_('Tags'), 0, array(
'isMultiple' => true
));
$languageRow =
$filterGroup->createRow('language-row');
new Text($languageRow, 'sourcelanguage',
n2_('Language'), '*');
$orderGroup = new ContainerTable($container,
'order-group', n2_('Order'));
$order = $orderGroup->createRow('order-row');
new GeneratorOrder($order, 'joomlaorder',
'cat.created_time|*|desc', array(
'options' => array(
'' => n2_('None'),
'cat.title' => n2_('Title'),
'cat.lft' =>
n2_('Ordering'),
'cat.created_time' => n2_('Creation
time'),
'cat.modified_time' => n2_('Modification
time'),
'cat.hits' => n2_('Hits')
)
));
}
protected function _getData($count, $startIndex) {
$category = $this->data->get('sourcecategory',
'');
$tags = array_map('intval', explode('||',
$this->data->get('sourcetags', '0')));
$query = 'SELECT ';
$query .= 'cat.id, ';
$query .= 'cat.title, ';
$query .= 'cat.alias, ';
$query .= 'cat.description, ';
$query .= 'cat.params, ';
$query .= 'cat_parent.id AS parent_id, ';
$query .= 'cat_parent.title AS parent_title ';
$query .= 'FROM #__categories AS cat ';
$query .= 'LEFT JOIN #__categories AS cat_parent ON
cat_parent.id = cat.parent_id ';
$where = array(
'cat.published = 1 ',
'cat.extension = \'com_content\' '
);
if ($category != 0) {
$where[] = 'cat.parent_id = ' . $category . '
';
}
if (!in_array(0, $tags)) {
$where[] = 'cat.id IN (SELECT content_item_id FROM
#__contentitem_tag_map WHERE type_alias =
\'com_content.category\' AND tag_id IN (' .
implode(',', $tags) . ')) ';
}
$language = $this->data->get('sourcelanguage',
'*');
if ($language) {
$where[] = 'cat.language = ' .
Database::quote($language) . ' ';
}
if (count($where) > 0) {
$query .= 'WHERE ' . implode(' AND ',
$where) . ' ';
}
$order =
Common::parse($this->data->get('joomlaorder',
'cat.created_time|*|desc'));
if ($order[0]) {
$query .= 'ORDER BY ' . $order[0] . ' ' .
$order[1] . ' ';
}
$query .= 'LIMIT ' . $startIndex . ', ' .
$count . ' ';
$result = Database::queryAll($query);
JPluginHelper::importPlugin('content');
$data = array();
for ($i = 0; $i < count($result); $i++) {
$r = array(
'title' => $result[$i]['title']
);
$article = new stdClass();
$article->text =
Slider::removeShortcode($result[$i]['description']);
$_p = array();
JoomlaShim::triggerEvent('onContentPrepare', array(
'com_smartslider3',
&$article,
&$_p,
0
));
if (!empty($article->text)) {
$r['description'] = $article->text;
} else {
$r['description'] = '';
}
$params = (array)json_decode($result[$i]['params'],
true);
$r['image'] = $r['thumbnail'] =
ImageFallback::fallback(array(@$params['image']),
array($r['description']));
$r += array(
'url' =>
'index.php?option=com_content&view=category&id=' .
$result[$i]['id'],
'url_label' => n2_('View category'),
'url_blog' =>
'index.php?option=com_content&view=category&layout=blog&id='
. $result[$i]['id']
);
if ($result[$i]['parent_title'] != 'ROOT')
{
$r += array(
'parent_title' =>
$result[$i]['parent_title'],
'parent_url' =>
'index.php?option=com_content&view=category&id=' .
$result[$i]['parent_id'],
'parent_url_blog' =>
'index.php?option=com_content&view=category&layout=blog&id='
. $result[$i]['parent_id']
);
} else {
$r += array(
'parent_title' => '',
'parent_url' => '',
'parent_url_blog' => ''
);
}
$r += array(
'alias' => $result[$i]['alias'],
'id' => $result[$i]['id'],
'parent_id' =>
$result[$i]['parent_id']
);
$data[] = $r;
}
return $data;
}
}
PK9e�[q v����Install/Install.phpnu�[���<?php
namespace Nextend\SmartSlider3\Install;
use Nextend\Framework\Database\Database;
use Nextend\SmartSlider3\Install\Joomla\InstallJoomla;
use Nextend\SmartSlider3\Install\WordPress\InstallWordPress;
use Nextend\SmartSlider3\Settings;
use Nextend\SmartSlider3\SmartSlider3Info;
class Install {
public static function install() {
$tables = new Tables();
$tables->install();
InstallJoomla::install();
Settings::set('n2_ss3_version',
SmartSlider3Info::$completeVersion);
/**
* Install a sample slider
*/
$sliders = Database::queryAll(Database::parsePrefix('SELECT *
FROM #__nextend2_smartslider3_sliders LIMIT 1'));
if (empty($sliders)) {
Database::query(Database::parsePrefix('INSERT INTO
`#__nextend2_smartslider3_sliders` (`alias`, `title`, `type`, `params`,
`time`, `thumbnail`, `ordering`) VALUES (NULL, \'Tutorial
Slider\', \'simple\',
\'{\"aria-label\":\"Slider\",\"alias-id\":\"\",\"alias-smoothscroll\":\"\",\"alias-slideswitch\":\"\",\"background\":\"\",\"background-fixed\":\"0\",\"background-size\":\"cover\",\"background-color\":\"FFFFFF00\",\"backgroundVideoMp4\":\"\",\"backgroundVideoMuted\":\"1\",\"backgroundVideoLoop\":\"1\",\"backgroundVideoMode\":\"fill\",\"align\":\"normal\",\"margin\":\"0|*|0|*|0|*|0\",\"padding\":\"0|*|0|*|0|*|0\",\"perspective\":\"1000\",\"border-width\":\"0\",\"border-color\":\"3E3E3Eff\",\"border-radius\":\"0\",\"slider-preset\":\"\",\"slider-css\":\"\",\"width\":\"1200\",\"height\":\"600\",\"mobileportrait\":\"1\",\"mobilelandscape\":\"1\",\"tabletportrait\":\"1\",\"tabletlandscape\":\"1\",\"desktopportrait\":\"1\",\"desktoplandscape\":\"1\",\"responsiveLimitSlideWidth\":\"1\",\"responsiveSlideWidthDesktopLandscape\":\"0\",\"responsiveSlideWidthMaxDesktopLandscape\":\"1600\",\"responsiveSlideWidth\":\"0\",\"responsiveSlideWidthMax\":\"3000\",\"responsiveSlideWidthTabletLandscape\":\"0\",\"responsiveSlideWidthMaxTabletLandscape\":\"1200\",\"responsiveSlideWidthTablet\":\"0\",\"responsiveSlideWidthMaxTablet\":\"3000\",\"responsiveSlideWidthMobileLandscape\":\"0\",\"responsiveSlideWidthMaxMobileLandscape\":\"740\",\"responsiveSlideWidthMobile\":\"0\",\"responsiveSlideWidthMaxMobile\":\"480\",\"responsive-breakpoint-desktop-portrait\":\"1440\",\"responsive-breakpoint-desktop-portrait-landscape\":\"1440\",\"responsive-breakpoint-tablet-landscape\":\"1300\",\"responsive-breakpoint-tablet-landscape-landscape\":\"1300\",\"responsive-breakpoint-tablet-portrait\":\"1199\",\"responsive-breakpoint-tablet-portrait-landscape\":\"1199\",\"responsive-breakpoint-mobile-landscape\":\"900\",\"responsive-breakpoint-mobile-landscape-landscape\":\"1050\",\"responsive-breakpoint-mobile-portrait\":\"700\",\"responsive-breakpoint-mobile-portrait-landscape\":\"900\",\"responsive-breakpoint-desktop-landscape-enabled\":\"0\",\"responsive-breakpoint-tablet-landscape-enabled\":\"0\",\"responsive-breakpoint-tablet-portrait-enabled\":\"1\",\"responsive-breakpoint-mobile-landscape-enabled\":\"0\",\"responsive-breakpoint-mobile-portrait-enabled\":\"1\",\"responsive-breakpoint-global\":\"0\",\"breakpoints-orientation\":\"portrait\",\"responsive-mode\":\"fullwidth\",\"responsiveSliderHeightMin\":\"0\",\"responsiveForceFull\":\"1\",\"responsiveForceFullOverflowX\":\"body\",\"responsiveForceFullHorizontalSelector\":\"body\",\"slider-size-override\":\"0\",\"slider-size-override-mobile-portrait\":\"0\",\"mobile-portrait-width\":\"320\",\"mobile-portrait-height\":\"568\",\"slider-size-override-mobile-landscape\":\"0\",\"mobile-landscape-width\":\"568\",\"mobile-landscape-height\":\"320\",\"slider-size-override-tablet-portrait\":\"0\",\"tablet-portrait-width\":\"768\",\"tablet-portrait-height\":\"1024\",\"slider-size-override-tablet-landscape\":\"0\",\"tablet-landscape-width\":\"1024\",\"tablet-landscape-height\":\"768\",\"slider-size-override-desktop-landscape\":\"0\",\"desktop-landscape-width\":\"1440\",\"desktop-landscape-height\":\"900\",\"controlsTouch\":\"horizontal\",\"controlsScroll\":\"0\",\"controlsKeyboard\":\"1\",\"widget-arrow-enabled\":\"0\",\"widgetarrow\":\"imageEmpty\",\"widget-arrow-previous\":\"thin-horizontal.svg\",\"widget-arrow-previous-image\":\"\",\"widget-arrow-previous-color\":\"ffffffcc\",\"widget-arrow-previous-hover\":\"1\",\"widget-arrow-previous-hover-color\":\"ffffffff\",\"widget-arrow-mirror\":\"1\",\"widget-arrow-next\":\"thin-horizontal.svg\",\"widget-arrow-next-image\":\"\",\"widget-arrow-next-color\":\"ffffffcc\",\"widget-arrow-next-hover\":\"0\",\"widget-arrow-next-hover-color\":\"ffffffcc\",\"widget-arrow-style\":\"\",\"widget-arrow-previous-position-mode\":\"simple\",\"widget-arrow-previous-position-area\":\"6\",\"widget-arrow-previous-position-stack\":\"1\",\"widget-arrow-previous-position-offset\":\"15\",\"widget-arrow-previous-position-horizontal\":\"left\",\"widget-arrow-previous-position-horizontal-position\":\"0\",\"widget-arrow-previous-position-horizontal-unit\":\"px\",\"widget-arrow-previous-position-vertical\":\"top\",\"widget-arrow-previous-position-vertical-position\":\"0\",\"widget-arrow-previous-position-vertical-unit\":\"px\",\"widget-arrow-next-position-mode\":\"simple\",\"widget-arrow-next-position-area\":\"7\",\"widget-arrow-next-position-stack\":\"1\",\"widget-arrow-next-position-offset\":\"15\",\"widget-arrow-next-position-horizontal\":\"left\",\"widget-arrow-next-position-horizontal-position\":\"0\",\"widget-arrow-next-position-horizontal-unit\":\"px\",\"widget-arrow-next-position-vertical\":\"top\",\"widget-arrow-next-position-vertical-position\":\"0\",\"widget-arrow-next-position-vertical-unit\":\"px\",\"widget-arrow-animation\":\"fade\",\"widget-arrow-previous-alt\":\"previous
arrow\",\"widget-arrow-next-alt\":\"next
arrow\",\"widget-arrow-base64\":\"1\",\"widget-arrow-display-hover\":\"0\",\"widget-arrow-display-mobileportrait\":\"0\",\"widget-arrow-display-mobilelandscape\":\"0\",\"widget-arrow-display-tabletportrait\":\"1\",\"widget-arrow-display-tabletlandscape\":\"1\",\"widget-arrow-display-desktopportrait\":\"1\",\"widget-arrow-display-desktoplandscape\":\"1\",\"widget-arrow-exclude-slides\":\"\",\"widget-bullet-enabled\":\"1\",\"widgetbullet\":\"transition\",\"widget-bullet-position-mode\":\"simple\",\"widget-bullet-position-area\":\"10\",\"widget-bullet-position-stack\":\"1\",\"widget-bullet-position-offset\":\"5\",\"widget-bullet-position-horizontal\":\"left\",\"widget-bullet-position-horizontal-position\":\"0\",\"widget-bullet-position-horizontal-unit\":\"px\",\"widget-bullet-position-vertical\":\"top\",\"widget-bullet-position-vertical-position\":\"0\",\"widget-bullet-position-vertical-unit\":\"px\",\"widget-bullet-action\":\"click\",\"widget-bullet-style\":\"{\\\"data\\\":[{\\\"backgroundcolor\\\":\\\"00000000\\\",\\\"opacity\\\":100,\\\"padding\\\":\\\"5|*|5|*|5|*|5|*|px\\\",\\\"boxshadow\\\":\\\"0|*|0|*|0|*|0|*|000000ff\\\",\\\"border\\\":\\\"2|*|solid|*|ffffffcc\\\",\\\"borderradius\\\":\\\"50\\\",\\\"extra\\\":\\\"margin:
4px;\\\"},{\\\"extra\\\":\\\"\\\",\\\"backgroundcolor\\\":\\\"ffffffcc\\\",\\\"border\\\":\\\"2|*|solid|*|ffffffcc\\\"}]}\",\"widget-bullet-bar\":\"\",\"widget-bullet-bar-full-size\":\"0\",\"widget-bullet-align\":\"center\",\"widget-bullet-orientation\":\"auto\",\"widget-bullet-thumbnail-show-image\":\"0\",\"widget-bullet-thumbnail-width\":\"60\",\"widget-bullet-thumbnail-height\":\"60\",\"widget-bullet-thumbnail-style\":\"{\\\"data\\\":[{\\\"backgroundcolor\\\":\\\"00000080\\\",\\\"padding\\\":\\\"3|*|3|*|3|*|3|*|px\\\",\\\"boxshadow\\\":\\\"0|*|0|*|0|*|0|*|000000ff\\\",\\\"border\\\":\\\"0|*|solid|*|000000ff\\\",\\\"borderradius\\\":\\\"3\\\",\\\"extra\\\":\\\"margin:
5px;\\\"}]}\",\"widget-bullet-thumbnail-side\":\"before\",\"widget-bullet-display-hover\":\"0\",\"widget-bullet-display-mobileportrait\":\"1\",\"widget-bullet-display-mobilelandscape\":\"1\",\"widget-bullet-display-tabletportrait\":\"1\",\"widget-bullet-display-tabletlandscape\":\"1\",\"widget-bullet-display-desktopportrait\":\"1\",\"widget-bullet-display-desktoplandscape\":\"1\",\"widget-bullet-exclude-slides\":\"\",\"widget-bar-enabled\":\"0\",\"widgetbar\":\"horizontal\",\"widget-bar-position-mode\":\"simple\",\"widget-bar-position-area\":\"10\",\"widget-bar-position-stack\":\"1\",\"widget-bar-position-offset\":\"30\",\"widget-bar-position-horizontal\":\"left\",\"widget-bar-position-horizontal-position\":\"0\",\"widget-bar-position-horizontal-unit\":\"px\",\"widget-bar-position-vertical\":\"top\",\"widget-bar-position-vertical-position\":\"0\",\"widget-bar-position-vertical-unit\":\"px\",\"widget-bar-animate\":\"0\",\"widget-bar-style\":\"{\\\"data\\\":[{\\\"backgroundcolor\\\":\\\"000000ab\\\",\\\"padding\\\":\\\"5|*|20|*|5|*|20|*|px\\\",\\\"boxshadow\\\":\\\"0|*|0|*|0|*|0|*|000000ff\\\",\\\"border\\\":\\\"0|*|solid|*|000000ff\\\",\\\"borderradius\\\":\\\"40\\\",\\\"extra\\\":\\\"\\\"}]}\",\"widget-bar-show-title\":\"1\",\"widget-bar-font-title\":\"{\\\"data\\\":[{\\\"color\\\":\\\"ffffffff\\\",\\\"size\\\":\\\"14||px\\\",\\\"tshadow\\\":\\\"0|*|0|*|0|*|000000c7\\\",\\\"afont\\\":\\\"Montserrat\\\",\\\"lineheight\\\":\\\"1.3\\\",\\\"bold\\\":0,\\\"italic\\\":0,\\\"underline\\\":0,\\\"align\\\":\\\"left\\\",\\\"extra\\\":\\\"vertical-align:
middle;\\\"},{\\\"color\\\":\\\"fc2828ff\\\",\\\"afont\\\":\\\"google(@import
url(http:\\/\\/fonts.googleapis.com\\/css?family=Raleway);),Arial\\\",\\\"size\\\":\\\"25||px\\\"},{}]}\",\"widget-bar-show-description\":\"1\",\"widget-bar-font-description\":\"{\\\"data\\\":[{\\\"color\\\":\\\"ffffffff\\\",\\\"size\\\":\\\"14||px\\\",\\\"tshadow\\\":\\\"0|*|0|*|0|*|000000c7\\\",\\\"afont\\\":\\\"Montserrat\\\",\\\"lineheight\\\":\\\"1.3\\\",\\\"bold\\\":0,\\\"italic\\\":1,\\\"underline\\\":0,\\\"align\\\":\\\"left\\\",\\\"extra\\\":\\\"vertical-align:
middle;\\\"},{\\\"color\\\":\\\"fc2828ff\\\",\\\"afont\\\":\\\"Raleway,Arial\\\",\\\"size\\\":\\\"25||px\\\"},{}]}\",\"widget-bar-slide-count\":\"0\",\"widget-bar-width\":\"100%\",\"widget-bar-full-width\":\"0\",\"widget-bar-separator\":\"
-
\",\"widget-bar-align\":\"center\",\"widget-bar-display-hover\":\"0\",\"widget-bar-display-mobileportrait\":\"1\",\"widget-bar-display-mobilelandscape\":\"1\",\"widget-bar-display-tabletportrait\":\"1\",\"widget-bar-display-tabletlandscape\":\"1\",\"widget-bar-display-desktopportrait\":\"1\",\"widget-bar-display-desktoplandscape\":\"1\",\"widget-bar-exclude-slides\":\"\",\"widget-thumbnail-enabled\":\"0\",\"widgetthumbnail\":\"default\",\"widget-thumbnail-show-image\":\"1\",\"widget-thumbnail-width\":\"100\",\"widget-thumbnail-height\":\"60\",\"widget-thumbnail-position-mode\":\"simple\",\"widget-thumbnail-position-area\":\"12\",\"widget-thumbnail-position-stack\":\"1\",\"widget-thumbnail-position-offset\":\"0\",\"widget-thumbnail-position-horizontal\":\"left\",\"widget-thumbnail-position-horizontal-position\":\"0\",\"widget-thumbnail-position-horizontal-unit\":\"px\",\"widget-thumbnail-position-vertical\":\"top\",\"widget-thumbnail-position-vertical-position\":\"0\",\"widget-thumbnail-position-vertical-unit\":\"px\",\"widget-thumbnail-action\":\"click\",\"widget-thumbnail-align-content\":\"start\",\"widget-thumbnail-style-bar\":\"{\\\"data\\\":[{\\\"backgroundcolor\\\":\\\"242424ff\\\",\\\"padding\\\":\\\"3|*|3|*|3|*|3|*|px\\\",\\\"boxshadow\\\":\\\"0|*|0|*|0|*|0|*|000000ff\\\",\\\"border\\\":\\\"0|*|solid|*|000000ff\\\",\\\"borderradius\\\":\\\"0\\\",\\\"extra\\\":\\\"\\\"}]}\",\"widget-thumbnail-style-slides\":\"{\\\"data\\\":[{\\\"backgroundcolor\\\":\\\"00000000\\\",\\\"padding\\\":\\\"0|*|0|*|0|*|0|*|px\\\",\\\"boxshadow\\\":\\\"0|*|0|*|0|*|0|*|000000ff\\\",\\\"border\\\":\\\"0|*|solid|*|ffffff00\\\",\\\"borderradius\\\":\\\"0\\\",\\\"opacity\\\":\\\"40\\\",\\\"extra\\\":\\\"margin:
3px;\\\\ntransition: all 0.4s;\\\\nbackground-size:
cover;\\\"},{\\\"border\\\":\\\"0|*|solid|*|ffffffcc\\\",\\\"opacity\\\":\\\"100\\\",\\\"extra\\\":\\\"\\\"}]}\",\"widget-thumbnail-title-style\":\"{\\\"data\\\":[{\\\"backgroundcolor\\\":\\\"000000ab\\\",\\\"padding\\\":\\\"3|*|10|*|3|*|10|*|px\\\",\\\"boxshadow\\\":\\\"0|*|0|*|0|*|0|*|000000ff\\\",\\\"border\\\":\\\"0|*|solid|*|000000ff\\\",\\\"borderradius\\\":\\\"0\\\",\\\"extra\\\":\\\"bottom:
0;\\\\nleft:
0;\\\"}]}\",\"widget-thumbnail-title\":\"0\",\"widget-thumbnail-title-font\":\"{\\\"data\\\":[{\\\"color\\\":\\\"ffffffff\\\",\\\"size\\\":\\\"12||px\\\",\\\"tshadow\\\":\\\"0|*|0|*|0|*|000000ab\\\",\\\"afont\\\":\\\"Montserrat\\\",\\\"lineheight\\\":\\\"1.2\\\",\\\"bold\\\":0,\\\"italic\\\":0,\\\"underline\\\":0,\\\"align\\\":\\\"left\\\"},{\\\"color\\\":\\\"fc2828ff\\\",\\\"afont\\\":\\\"google(@import
url(http:\\/\\/fonts.googleapis.com\\/css?family=Raleway);),Arial\\\",\\\"size\\\":\\\"25||px\\\"},{}]}\",\"widget-thumbnail-description\":\"0\",\"widget-thumbnail-description-font\":\"{\\\"data\\\":[{\\\"color\\\":\\\"ffffffff\\\",\\\"size\\\":\\\"12||px\\\",\\\"tshadow\\\":\\\"0|*|0|*|0|*|000000ab\\\",\\\"afont\\\":\\\"Montserrat\\\",\\\"lineheight\\\":\\\"1.3\\\",\\\"bold\\\":0,\\\"italic\\\":0,\\\"underline\\\":0,\\\"align\\\":\\\"left\\\"},{\\\"color\\\":\\\"fc2828ff\\\",\\\"afont\\\":\\\"google(@import
url(http:\\/\\/fonts.googleapis.com\\/css?family=Raleway);),Arial\\\",\\\"size\\\":\\\"25||px\\\"},{}]}\",\"widget-thumbnail-caption-placement\":\"overlay\",\"widget-thumbnail-caption-size\":\"100\",\"widget-thumbnail-arrow\":\"1\",\"widget-thumbnail-arrow-width\":\"26\",\"widget-thumbnail-arrow-offset\":\"0\",\"widget-thumbnail-arrow-prev-alt\":\"previous
arrow\",\"widget-thumbnail-arrow-next-alt\":\"next
arrow\",\"widget-thumbnail-arrow-image\":\"\",\"widget-thumbnail-group\":\"1\",\"widget-thumbnail-invert-group-direction\":\"0\",\"widget-thumbnail-orientation\":\"auto\",\"widget-thumbnail-size\":\"100%\",\"widget-thumbnail-display-hover\":\"0\",\"widget-thumbnail-display-mobileportrait\":\"1\",\"widget-thumbnail-display-mobilelandscape\":\"1\",\"widget-thumbnail-display-tabletportrait\":\"1\",\"widget-thumbnail-display-tabletlandscape\":\"1\",\"widget-thumbnail-display-desktopportrait\":\"1\",\"widget-thumbnail-display-desktoplandscape\":\"1\",\"widget-thumbnail-exclude-slides\":\"\",\"widget-shadow-enabled\":\"0\",\"widgetshadow\":\"shadow\",\"widget-shadow-shadow\":\"dark.png\",\"widget-shadow-shadow-image\":\"\",\"widget-shadow-width\":\"100%\",\"widget-shadow-display-mobileportrait\":\"1\",\"widget-shadow-display-mobilelandscape\":\"1\",\"widget-shadow-display-tabletportrait\":\"1\",\"widget-shadow-display-tabletlandscape\":\"1\",\"widget-shadow-display-desktopportrait\":\"1\",\"widget-shadow-display-desktoplandscape\":\"1\",\"widget-shadow-exclude-slides\":\"\",\"widget-fullscreen-enabled\":\"0\",\"widgetfullscreen\":\"image\",\"widget-fullscreen-tonormal\":\"full1.svg\",\"widget-fullscreen-tonormal-image\":\"\",\"widget-fullscreen-tonormal-color\":\"ffffffcc\",\"widget-fullscreen-mirror\":\"1\",\"widget-fullscreen-tofull\":\"full1.svg\",\"widget-fullscreen-tofull-image\":\"\",\"widget-fullscreen-tofull-color\":\"ffffffcc\",\"widget-fullscreen-style\":\"{\\\"data\\\":[{\\\"backgroundcolor\\\":\\\"000000ab\\\",\\\"padding\\\":\\\"10|*|10|*|10|*|10|*|px\\\",\\\"boxshadow\\\":\\\"0|*|0|*|0|*|0|*|000000ff\\\",\\\"border\\\":\\\"0|*|solid|*|000000ff\\\",\\\"borderradius\\\":\\\"3\\\",\\\"extra\\\":\\\"\\\"},{\\\"backgroundcolor\\\":\\\"000000ab\\\"}]}\",\"widget-fullscreen-position-mode\":\"simple\",\"widget-fullscreen-position-area\":\"4\",\"widget-fullscreen-position-stack\":\"1\",\"widget-fullscreen-position-offset\":\"15\",\"widget-fullscreen-position-horizontal\":\"left\",\"widget-fullscreen-position-horizontal-position\":\"0\",\"widget-fullscreen-position-horizontal-unit\":\"px\",\"widget-fullscreen-position-vertical\":\"top\",\"widget-fullscreen-position-vertical-position\":\"0\",\"widget-fullscreen-position-vertical-unit\":\"px\",\"widget-fullscreen-responsive-desktop\":\"1\",\"widget-fullscreen-responsive-tablet\":\"0.7\",\"widget-fullscreen-responsive-mobile\":\"0.5\",\"widget-fullscreen-display-hover\":\"0\",\"widget-fullscreen-display-mobileportrait\":\"1\",\"widget-fullscreen-display-mobilelandscape\":\"1\",\"widget-fullscreen-display-tabletportrait\":\"1\",\"widget-fullscreen-display-tabletlandscape\":\"1\",\"widget-fullscreen-display-desktopportrait\":\"1\",\"widget-fullscreen-display-desktoplandscape\":\"1\",\"widget-fullscreen-exclude-slides\":\"\",\"widget-html-enabled\":\"0\",\"widgethtml\":\"html\",\"widget-html-position-mode\":\"simple\",\"widget-html-position-area\":\"2\",\"widget-html-position-stack\":\"1\",\"widget-html-position-offset\":\"0\",\"widget-html-position-horizontal\":\"left\",\"widget-html-position-horizontal-position\":\"0\",\"widget-html-position-horizontal-unit\":\"px\",\"widget-html-position-vertical\":\"top\",\"widget-html-position-vertical-position\":\"0\",\"widget-html-position-vertical-unit\":\"px\",\"widget-html-code\":\"\",\"widget-html-display-hover\":\"0\",\"widget-html-display-mobileportrait\":\"1\",\"widget-html-display-mobilelandscape\":\"1\",\"widget-html-display-tabletportrait\":\"1\",\"widget-html-display-tabletlandscape\":\"1\",\"widget-html-display-desktopportrait\":\"1\",\"widget-html-display-desktoplandscape\":\"1\",\"widget-html-exclude-slides\":\"\",\"animation\":\"fade\",\"animation-duration\":\"500\",\"animation-delay\":\"0\",\"animation-easing\":\"easeOutQuad\",\"carousel\":\"1\",\"background-animation\":\"\",\"background-animation-color\":\"333333ff\",\"background-animation-speed\":\"normal\",\"animation-shifted-background-animation\":\"auto\",\"kenburns-animation\":\"50|*|50|*|\",\"kenburns-animation-speed\":\"default\",\"kenburns-animation-strength\":\"default\",\"shape-divider\":\"\",\"particle\":\"\",\"playfirstlayer\":\"1\",\"playonce\":\"0\",\"layer-animation-play-in\":\"end\",\"layer-animation-play-mode\":\"skippable\",\"parallax-enabled\":\"1\",\"parallax-enabled-mobile\":\"0\",\"parallax-3d\":\"0\",\"parallax-animate\":\"1\",\"parallax-horizontal\":\"mouse\",\"parallax-vertical\":\"mouse\",\"parallax-mouse-origin\":\"slider\",\"parallax-scroll-move\":\"both\",\"autoplay\":\"0\",\"autoplayDuration\":\"8000\",\"autoplayStart\":\"1\",\"autoplayAllowReStart\":\"0\",\"autoplayLoop\":\"1\",\"autoplayfinish\":\"1|*|loop|*|current\",\"loop-single-slide\":\"0\",\"autoplayStopClick\":\"1\",\"autoplayStopMouse\":\"0\",\"autoplayStopMedia\":\"1\",\"autoplayResumeClick\":\"0\",\"autoplayResumeMouse\":\"0\",\"autoplayResumeMedia\":\"1\",\"widget-autoplay-enabled\":\"0\",\"widgetautoplay\":\"image\",\"widget-autoplay-play\":\"small-light.svg\",\"widget-autoplay-play-image\":\"\",\"widget-autoplay-play-color\":\"ffffffcc\",\"widget-autoplay-style\":\"{\\\"data\\\":[{\\\"backgroundcolor\\\":\\\"000000ab\\\",\\\"padding\\\":\\\"10|*|10|*|10|*|10|*|px\\\",\\\"boxshadow\\\":\\\"0|*|0|*|0|*|0|*|000000ff\\\",\\\"border\\\":\\\"0|*|solid|*|000000ff\\\",\\\"borderradius\\\":\\\"3\\\",\\\"extra\\\":\\\"\\\"},{\\\"backgroundcolor\\\":\\\"000000ab\\\"}]}\",\"widget-autoplay-mirror\":\"1\",\"widget-autoplay-pause\":\"small-light.svg\",\"widget-autoplay-pause-image\":\"\",\"widget-autoplay-pause-color\":\"ffffffcc\",\"widget-autoplay-responsive-desktop\":\"1\",\"widget-autoplay-responsive-tablet\":\"0.7\",\"widget-autoplay-responsive-mobile\":\"0.5\",\"widget-autoplay-position-mode\":\"simple\",\"widget-autoplay-position-area\":\"4\",\"widget-autoplay-position-stack\":\"1\",\"widget-autoplay-position-offset\":\"15\",\"widget-autoplay-position-horizontal\":\"left\",\"widget-autoplay-position-horizontal-position\":\"0\",\"widget-autoplay-position-horizontal-unit\":\"px\",\"widget-autoplay-position-vertical\":\"top\",\"widget-autoplay-position-vertical-position\":\"0\",\"widget-autoplay-position-vertical-unit\":\"px\",\"widget-autoplay-display-hover\":\"0\",\"widget-autoplay-display-mobileportrait\":\"1\",\"widget-autoplay-display-mobilelandscape\":\"1\",\"widget-autoplay-display-tabletportrait\":\"1\",\"widget-autoplay-display-tabletlandscape\":\"1\",\"widget-autoplay-display-desktopportrait\":\"1\",\"widget-autoplay-display-desktoplandscape\":\"1\",\"widget-autoplay-exclude-slides\":\"\",\"widget-indicator-enabled\":\"0\",\"widgetindicator\":\"pie\",\"widget-indicator-position-mode\":\"simple\",\"widget-indicator-position-area\":\"4\",\"widget-indicator-position-stack\":\"1\",\"widget-indicator-position-offset\":\"15\",\"widget-indicator-position-horizontal\":\"left\",\"widget-indicator-position-horizontal-position\":\"0\",\"widget-indicator-position-horizontal-unit\":\"px\",\"widget-indicator-position-vertical\":\"top\",\"widget-indicator-position-vertical-position\":\"0\",\"widget-indicator-position-vertical-unit\":\"px\",\"widget-indicator-size\":\"25\",\"widget-indicator-thickness\":\"30\",\"widget-indicator-track\":\"000000ab\",\"widget-indicator-bar\":\"ffffffff\",\"widget-indicator-style\":\"\",\"widget-indicator-display-hover\":\"0\",\"widget-indicator-display-mobileportrait\":\"1\",\"widget-indicator-display-mobilelandscape\":\"1\",\"widget-indicator-display-tabletportrait\":\"1\",\"widget-indicator-display-tabletlandscape\":\"1\",\"widget-indicator-display-desktopportrait\":\"1\",\"widget-indicator-display-desktoplandscape\":\"1\",\"widget-indicator-exclude-slides\":\"\",\"imageload\":\"0\",\"imageloadNeighborSlides\":\"0\",\"optimize-scale\":\"0\",\"optimize-quality\":\"70\",\"optimize-thumbnail-scale\":\"0\",\"optimize-thumbnail-quality\":\"70\",\"optimize-slide-width-normal\":\"1920\",\"optimizeThumbnailWidth\":\"100\",\"optimizeThumbnailHeight\":\"60\",\"layer-image-optimize\":\"0\",\"layer-image-width-tablet\":\"800\",\"layer-image-width-mobile\":\"425\",\"layer-image-base64\":\"0\",\"layer-image-base64-size\":\"50\",\"slides-background-video-mobile\":\"1\",\"playWhenVisible\":\"1\",\"playWhenVisibleAt\":\"50\",\"dependency\":\"\",\"delay\":\"0\",\"is-delayed\":\"0\",\"backgroundMode\":\"fill\",\"slide-css\":\"\",\"randomize\":\"0\",\"randomizeFirst\":\"0\",\"randomize-cache\":\"1\",\"variations\":\"5\",\"reverse-slides\":\"0\",\"maximumslidecount\":\"1000\",\"maintain-session\":\"0\",\"global-lightbox\":\"0\",\"global-lightbox-label\":\"0\",\"slide-background-parallax\":\"0\",\"slide-background-parallax-strength\":\"50\",\"bg-parallax-tablet\":\"0\",\"bg-parallax-mobile\":\"0\",\"blockrightclick\":\"0\",\"controlsBlockCarouselInteraction\":\"1\",\"clear-both\":\"1\",\"clear-both-after\":\"1\",\"overflow-hidden-page\":\"0\",\"responsiveFocusUser\":\"1\",\"responsiveFocusEdge\":\"auto\",\"classes\":\"\",\"custom-css-codes\":\"\",\"callbacks\":\"\",\"related-posts\":\"\"}\',
\'2020-02-25 13:53:41\',
\'https://smartslider3.com/wp-content/uploads/slider404/tutorialsliderthumbnail-1.png\',
0);'));
$sliderID = Database::insertId();
Database::query(Database::parsePrefix('INSERT INTO
`#__nextend2_smartslider3_slides` (`title`, `slider`, `publish_up`,
`publish_down`, `published`, `first`, `slide`, `description`, `thumbnail`,
`params`, `ordering`, `generator_id`) VALUES
(\'Slide Background\', ' . $sliderID . ',
\'1970-01-01 00:00:00\', \'1970-01-01 00:00:00\', 1, 0,
\'[{\"type\":\"content\",\"pm\":\"default\",\"desktopportraitfontsize\":100,\"desktopportraitmaxwidth\":1120,\"desktopportraitinneralign\":\"inherit\",\"desktopportraitpadding\":\"0|*|0|*|0|*|0|*|px\",\"desktopportraitselfalign\":\"center\",\"opened\":1,\"id\":\"\",\"uniqueclass\":\"n-uc-IbNOabpfT5aE\",\"generatorvisible\":\"\",\"zindex\":2,\"class\":\"\",\"crop\":\"visible\",\"rotation\":0,\"parallax\":0,\"desktopportrait\":1,\"desktoplandscape\":1,\"tabletportrait\":1,\"tabletlandscape\":1,\"mobileportrait\":1,\"mobilelandscape\":1,\"bgimage\":\"\",\"bgimagex\":50,\"bgimagey\":50,\"bgcolor\":\"00000000\",\"bgcolorgradient\":\"off\",\"bgcolorgradientend\":\"00000000\",\"verticalalign\":\"center\",\"layers\":[{\"type\":\"row\",\"pm\":\"normal\",\"desktopportraitfontsize\":100,\"desktopportraitinneralign\":\"inherit\",\"desktopportraitpadding\":\"10|*|0|*|10|*|0|*|px\",\"desktopportraitgutter\":0,\"desktopportraitwrapafter\":0,\"desktopportraitmargin\":\"0|*|0|*|0|*|0|*|px\",\"desktopportraitheight\":0,\"desktopportraitmaxwidth\":0,\"desktopportraitselfalign\":\"inherit\",\"tabletportraitpadding\":\"10|*|0|*|10|*|0|*|px\",\"tabletportraitgutter\":20,\"mobileportraitpadding\":\"0|*|0|*|0|*|0|*|px\",\"mobileportraitgutter\":20,\"mobileportraitwrapafter\":1,\"mobileportraitmaxwidth\":400,\"mobilelandscapewrapafter\":1,\"opened\":1,\"id\":\"\",\"uniqueclass\":\"n-uc-dtwtw9DVCwgQ\",\"generatorvisible\":\"\",\"zindex\":2,\"class\":\"\",\"crop\":\"visible\",\"rotation\":0,\"parallax\":0,\"desktopportrait\":1,\"desktoplandscape\":1,\"tabletportrait\":1,\"tabletlandscape\":1,\"mobileportrait\":1,\"mobilelandscape\":1,\"href\":\"\",\"href-target\":\"_self\",\"bgimage\":\"\",\"bgimagex\":50,\"bgimagey\":50,\"bgcolor\":\"ffffff00\",\"bgcolorgradient\":\"off\",\"bgcolorgradientend\":\"00000000\",\"borderwidth\":\"1|*|1|*|1|*|1\",\"borderstyle\":\"none\",\"bordercolor\":\"FFFFFFFF\",\"borderradius\":0,\"boxshadow\":\"0|*|0|*|0|*|0|*|00000080\",\"fullwidth\":1,\"stretch\":0,\"name\":\"Row\",\"namesynced\":1,\"cols\":[{\"type\":\"col\",\"pm\":\"default\",\"desktopportraitfontsize\":100,\"desktopportraitmaxwidth\":0,\"desktopportraitinneralign\":\"left\",\"desktopportraitpadding\":\"10|*|10|*|10|*|10|*|px\",\"desktopportraitorder\":0,\"tabletportraitpadding\":\"10|*|0|*|10|*|0|*|px\",\"mobileportraitinneralign\":\"left\",\"mobileportraitpadding\":\"10|*|0|*|10|*|0|*|px\",\"mobileportraitorder\":2,\"opened\":1,\"id\":\"\",\"uniqueclass\":\"n-uc-Fjvyu081qJeK\",\"generatorvisible\":\"\",\"zindex\":2,\"class\":\"\",\"crop\":\"visible\",\"rotation\":0,\"parallax\":0,\"desktopportrait\":1,\"desktoplandscape\":1,\"tabletportrait\":1,\"tabletlandscape\":1,\"mobileportrait\":1,\"mobilelandscape\":1,\"bgimage\":\"\",\"bgimagex\":50,\"bgimagey\":50,\"bgcolor\":\"00000000\",\"bgcolorgradient\":\"off\",\"bgcolorgradientend\":\"00000000\",\"verticalalign\":\"center\",\"colwidth\":\"2/5\",\"href\":\"\",\"href-target\":\"_self\",\"borderradius\":0,\"boxshadow\":\"0|*|0|*|0|*|0|*|00000080\",\"borderwidth\":\"0|*|0|*|0|*|0\",\"borderstyle\":\"solid\",\"bordercolor\":\"ffffffff\",\"name\":\"Column\",\"namesynced\":1,\"layers\":[{\"type\":\"layer\",\"pm\":\"normal\",\"desktopportraitfontsize\":100,\"desktopportraitmargin\":\"0|*|0|*|0|*|0|*|px\",\"desktopportraitheight\":0,\"desktopportraitmaxwidth\":0,\"desktopportraitselfalign\":\"inherit\",\"tabletportraitfontsize\":80,\"mobileportraitfontsize\":60,\"id\":\"\",\"uniqueclass\":\"\",\"generatorvisible\":\"\",\"zindex\":2,\"class\":\"\",\"crop\":\"visible\",\"rotation\":0,\"parallax\":0,\"desktopportrait\":1,\"desktoplandscape\":1,\"tabletportrait\":1,\"tabletlandscape\":1,\"mobileportrait\":1,\"mobilelandscape\":1,\"name\":\"Jeans
Store
Interior\",\"namesynced\":1,\"item\":{\"type\":\"heading\",\"values\":{\"font\":\"{\\\"data\\\":[{\\\"extra\\\":\\\"\\\",\\\"color\\\":\\\"ffffffff\\\",\\\"size\\\":\\\"36||px\\\",\\\"tshadow\\\":\\\"0|*|0|*|0|*|000000ff\\\",\\\"afont\\\":\\\"Roboto\\\",\\\"lineheight\\\":\\\"1.2\\\",\\\"weight\\\":1,\\\"italic\\\":0,\\\"underline\\\":0,\\\"align\\\":\\\"inherit\\\",\\\"letterspacing\\\":\\\"normal\\\",\\\"wordspacing\\\":\\\"normal\\\",\\\"texttransform\\\":\\\"none\\\"},{\\\"extra\\\":\\\"\\\"}]}\",\"style\":\"\",\"priority\":\"div\",\"fullwidth\":\"1\",\"nowrap\":\"0\",\"heading\":\"01.
Slide
Background\",\"title\":\"\",\"href\":\"#\",\"href-target\":\"_self\",\"href-rel\":\"\",\"split-text-transform-origin\":\"50|*|50|*|0\",\"split-text-backface-visibility\":\"1\",\"split-text-animation-in\":\"\",\"split-text-delay-in\":\"0\",\"split-text-animation-out\":\"\",\"split-text-delay-out\":\"0\",\"class\":\"\"}}},{\"type\":\"layer\",\"pm\":\"normal\",\"desktopportraitfontsize\":100,\"desktopportraitmargin\":\"0|*|0|*|0|*|0|*|px\",\"desktopportraitheight\":0,\"desktopportraitmaxwidth\":0,\"desktopportraitselfalign\":\"inherit\",\"tabletportraitfontsize\":80,\"mobileportraitfontsize\":70,\"id\":\"\",\"uniqueclass\":\"\",\"generatorvisible\":\"\",\"zindex\":2,\"class\":\"\",\"crop\":\"visible\",\"rotation\":0,\"parallax\":0,\"desktopportrait\":1,\"desktoplandscape\":1,\"tabletportrait\":1,\"tabletlandscape\":1,\"mobileportrait\":1,\"mobilelandscape\":1,\"name\":\"Lorem
ipsum dolor sit amet,
consect\",\"namesynced\":1,\"item\":{\"type\":\"heading\",\"values\":{\"font\":\"{\\\"data\\\":[{\\\"extra\\\":\\\"\\\",\\\"color\\\":\\\"ffffffb0\\\",\\\"size\\\":\\\"24||px\\\",\\\"tshadow\\\":\\\"0|*|0|*|0|*|000000ff\\\",\\\"afont\\\":\\\"Roboto\\\",\\\"lineheight\\\":\\\"1.3\\\",\\\"weight\\\":300,\\\"italic\\\":0,\\\"underline\\\":0,\\\"align\\\":\\\"inherit\\\",\\\"letterspacing\\\":\\\"normal\\\",\\\"wordspacing\\\":\\\"normal\\\",\\\"texttransform\\\":\\\"none\\\"},{\\\"extra\\\":\\\"\\\"}]}\",\"style\":\"\",\"priority\":\"div\",\"fullwidth\":\"1\",\"nowrap\":\"0\",\"heading\":\"Every
slide includes a background, which can be a picture or solid
color.\",\"title\":\"\",\"href\":\"#\",\"href-target\":\"_self\",\"href-rel\":\"\",\"split-text-transform-origin\":\"50|*|50|*|0\",\"split-text-backface-visibility\":\"1\",\"split-text-animation-in\":\"\",\"split-text-delay-in\":\"0\",\"split-text-animation-out\":\"\",\"split-text-delay-out\":\"0\",\"class\":\"\"}}},{\"type\":\"layer\",\"pm\":\"normal\",\"desktopportraitfontsize\":100,\"desktopportraitmargin\":\"20|*|0|*|0|*|0|*|px\",\"desktopportraitheight\":0,\"desktopportraitmaxwidth\":0,\"desktopportraitselfalign\":\"inherit\",\"tabletportraitfontsize\":100,\"mobileportraitfontsize\":80,\"mobileportraitmargin\":\"10|*|0|*|0|*|0|*|px\",\"id\":\"\",\"uniqueclass\":\"\",\"generatorvisible\":\"\",\"zindex\":2,\"class\":\"\",\"crop\":\"visible\",\"rotation\":0,\"parallax\":0,\"desktopportrait\":1,\"desktoplandscape\":1,\"tabletportrait\":1,\"tabletlandscape\":1,\"mobileportrait\":1,\"mobilelandscape\":1,\"name\":\"Latest
Project\",\"namesynced\":1,\"item\":{\"type\":\"heading\",\"values\":{\"font\":\"{\\\"data\\\":[{\\\"extra\\\":\\\"\\\",\\\"color\\\":\\\"ffffffdb\\\",\\\"size\\\":\\\"14||px\\\",\\\"tshadow\\\":\\\"0|*|0|*|0|*|000000ff\\\",\\\"afont\\\":\\\"Roboto\\\",\\\"lineheight\\\":\\\"1.5\\\",\\\"weight\\\":1,\\\"italic\\\":0,\\\"underline\\\":0,\\\"align\\\":\\\"inherit\\\",\\\"letterspacing\\\":\\\"1px\\\",\\\"wordspacing\\\":\\\"normal\\\",\\\"texttransform\\\":\\\"uppercase\\\"},{\\\"extra\\\":\\\"\\\"}]}\",\"style\":\"\",\"priority\":\"div\",\"fullwidth\":\"1\",\"nowrap\":\"0\",\"heading\":\"Step
1\",\"title\":\"\",\"href\":\"#\",\"href-target\":\"_self\",\"href-rel\":\"\",\"split-text-transform-origin\":\"50|*|50|*|0\",\"split-text-backface-visibility\":\"1\",\"split-text-animation-in\":\"\",\"split-text-delay-in\":\"0\",\"split-text-animation-out\":\"\",\"split-text-delay-out\":\"0\",\"class\":\"\"}}},{\"type\":\"layer\",\"pm\":\"normal\",\"desktopportraitfontsize\":100,\"desktopportraitmargin\":\"0|*|0|*|0|*|0|*|px\",\"desktopportraitheight\":0,\"desktopportraitmaxwidth\":0,\"desktopportraitselfalign\":\"inherit\",\"tabletportraitfontsize\":90,\"mobileportraitfontsize\":70,\"id\":\"\",\"uniqueclass\":\"\",\"generatorvisible\":\"\",\"zindex\":2,\"class\":\"\",\"crop\":\"visible\",\"rotation\":0,\"parallax\":0,\"desktopportrait\":1,\"desktoplandscape\":1,\"tabletportrait\":1,\"tabletlandscape\":1,\"mobileportrait\":1,\"mobilelandscape\":1,\"name\":\"Text\",\"namesynced\":1,\"item\":{\"type\":\"text\",\"values\":{\"font\":\"{\\\"data\\\":[{\\\"extra\\\":\\\"\\\",\\\"color\\\":\\\"ffffffb0\\\",\\\"size\\\":\\\"18||px\\\",\\\"tshadow\\\":\\\"0|*|0|*|0|*|000000ff\\\",\\\"afont\\\":\\\"Roboto\\\",\\\"lineheight\\\":\\\"1.6\\\",\\\"weight\\\":400,\\\"italic\\\":0,\\\"underline\\\":0,\\\"align\\\":\\\"inherit\\\",\\\"letterspacing\\\":\\\"normal\\\",\\\"wordspacing\\\":\\\"normal\\\",\\\"texttransform\\\":\\\"none\\\"},{\\\"extra\\\":\\\"\\\",\\\"color\\\":\\\"1890d7ff\\\"},{\\\"extra\\\":\\\"\\\",\\\"color\\\":\\\"1890d7ff\\\"}]}\",\"style\":\"\",\"content\":\"To
change the background click on the label bar and in the layer window select
the style
tab.\",\"content-tablet-enabled\":\"0\",\"contenttablet\":\"\",\"content-mobile-enabled\":\"0\",\"contentmobile\":\"\"}}},{\"type\":\"layer\",\"pm\":\"normal\",\"desktopportraitfontsize\":100,\"desktopportraitmargin\":\"20|*|0|*|0|*|0|*|px\",\"desktopportraitheight\":0,\"desktopportraitmaxwidth\":0,\"desktopportraitselfalign\":\"inherit\",\"tabletportraitfontsize\":100,\"mobileportraitfontsize\":80,\"mobileportraitmargin\":\"10|*|0|*|0|*|0|*|px\",\"id\":\"\",\"uniqueclass\":\"\",\"generatorvisible\":\"\",\"zindex\":2,\"class\":\"\",\"crop\":\"visible\",\"rotation\":0,\"parallax\":0,\"desktopportrait\":1,\"desktoplandscape\":1,\"tabletportrait\":1,\"tabletlandscape\":1,\"mobileportrait\":1,\"mobilelandscape\":1,\"name\":\"Latest
Project\",\"namesynced\":1,\"item\":{\"type\":\"heading\",\"values\":{\"font\":\"{\\\"data\\\":[{\\\"extra\\\":\\\"\\\",\\\"color\\\":\\\"ffffffdb\\\",\\\"size\\\":\\\"14||px\\\",\\\"tshadow\\\":\\\"0|*|0|*|0|*|000000ff\\\",\\\"afont\\\":\\\"Roboto\\\",\\\"lineheight\\\":\\\"1.5\\\",\\\"weight\\\":1,\\\"italic\\\":0,\\\"underline\\\":0,\\\"align\\\":\\\"inherit\\\",\\\"letterspacing\\\":\\\"1px\\\",\\\"wordspacing\\\":\\\"normal\\\",\\\"texttransform\\\":\\\"uppercase\\\"},{\\\"extra\\\":\\\"\\\"}]}\",\"style\":\"\",\"priority\":\"div\",\"fullwidth\":\"1\",\"nowrap\":\"0\",\"heading\":\"Step
2\",\"title\":\"\",\"href\":\"#\",\"href-target\":\"_self\",\"href-rel\":\"\",\"split-text-transform-origin\":\"50|*|50|*|0\",\"split-text-backface-visibility\":\"1\",\"split-text-animation-in\":\"\",\"split-text-delay-in\":\"0\",\"split-text-animation-out\":\"\",\"split-text-delay-out\":\"0\",\"class\":\"\"}}},{\"type\":\"layer\",\"pm\":\"normal\",\"desktopportraitfontsize\":100,\"desktopportraitmargin\":\"0|*|0|*|0|*|0|*|px\",\"desktopportraitheight\":0,\"desktopportraitmaxwidth\":0,\"desktopportraitselfalign\":\"inherit\",\"tabletportraitfontsize\":90,\"mobileportraitfontsize\":70,\"id\":\"\",\"uniqueclass\":\"\",\"generatorvisible\":\"\",\"zindex\":2,\"class\":\"\",\"crop\":\"visible\",\"rotation\":0,\"parallax\":0,\"desktopportrait\":1,\"desktoplandscape\":1,\"tabletportrait\":1,\"tabletlandscape\":1,\"mobileportrait\":1,\"mobilelandscape\":1,\"name\":\"Text\",\"namesynced\":1,\"item\":{\"type\":\"text\",\"values\":{\"font\":\"{\\\"data\\\":[{\\\"extra\\\":\\\"\\\",\\\"color\\\":\\\"ffffffb0\\\",\\\"size\\\":\\\"18||px\\\",\\\"tshadow\\\":\\\"0|*|0|*|0|*|000000ff\\\",\\\"afont\\\":\\\"Roboto\\\",\\\"lineheight\\\":\\\"1.6\\\",\\\"weight\\\":400,\\\"italic\\\":0,\\\"underline\\\":0,\\\"align\\\":\\\"inherit\\\",\\\"letterspacing\\\":\\\"normal\\\",\\\"wordspacing\\\":\\\"normal\\\",\\\"texttransform\\\":\\\"none\\\"},{\\\"extra\\\":\\\"\\\",\\\"color\\\":\\\"1890d7ff\\\"},{\\\"extra\\\":\\\"\\\",\\\"color\\\":\\\"1890d7ff\\\"}]}\",\"style\":\"\",\"content\":\"Choose
a source from the background top tab then upload an image or pick a
background
color.\",\"content-tablet-enabled\":\"0\",\"contenttablet\":\"\",\"content-mobile-enabled\":\"0\",\"contentmobile\":\"\"}}},{\"type\":\"layer\",\"pm\":\"normal\",\"desktopportraitfontsize\":100,\"desktopportraitmargin\":\"20|*|0|*|0|*|0|*|px\",\"desktopportraitheight\":0,\"desktopportraitmaxwidth\":0,\"desktopportraitselfalign\":\"inherit\",\"tabletportraitfontsize\":80,\"mobileportraitfontsize\":80,\"mobileportraitmargin\":\"10|*|0|*|0|*|0|*|px\",\"id\":\"\",\"uniqueclass\":\"\",\"generatorvisible\":\"\",\"zindex\":2,\"class\":\"\",\"crop\":\"visible\",\"rotation\":0,\"parallax\":0,\"desktopportrait\":1,\"desktoplandscape\":1,\"tabletportrait\":1,\"tabletlandscape\":1,\"mobileportrait\":1,\"mobilelandscape\":1,\"name\":\"Read
More\",\"namesynced\":1,\"item\":{\"type\":\"button\",\"values\":{\"font\":\"{\\\"data\\\":[{\\\"extra\\\":\\\"\\\",\\\"color\\\":\\\"ffffffff\\\",\\\"size\\\":\\\"14||px\\\",\\\"tshadow\\\":\\\"0|*|0|*|0|*|000000ff\\\",\\\"afont\\\":\\\"Roboto\\\",\\\"lineheight\\\":\\\"1.5\\\",\\\"weight\\\":1,\\\"italic\\\":0,\\\"underline\\\":0,\\\"align\\\":\\\"center\\\",\\\"letterspacing\\\":\\\"1px\\\",\\\"wordspacing\\\":\\\"normal\\\",\\\"texttransform\\\":\\\"none\\\"},{\\\"extra\\\":\\\"\\\",\\\"color\\\":\\\"0568f6ff\\\"}]}\",\"style\":\"{\\\"data\\\":[{\\\"extra\\\":\\\"\\\",\\\"backgroundcolor\\\":\\\"0568f6ff\\\",\\\"opacity\\\":100,\\\"padding\\\":\\\"1|*|2|*|1|*|2|*|em\\\",\\\"boxshadow\\\":\\\"0|*|0|*|0|*|0|*|000000ff\\\",\\\"border\\\":\\\"0|*|solid|*|000000ff\\\",\\\"borderradius\\\":\\\"5\\\"},{\\\"extra\\\":\\\"\\\",\\\"backgroundcolor\\\":\\\"ffffffff\\\"}]}\",\"content\":\"Next
Slide\",\"nowrap\":\"1\",\"fullwidth\":\"0\",\"href\":\"NextSlide[]\",\"href-target\":\"_self\",\"href-rel\":\"\",\"class\":\"\",\"icon\":\"\",\"iconsize\":\"100\",\"iconspacing\":\"30\",\"iconplacement\":\"left\"}}}]},{\"type\":\"col\",\"pm\":\"default\",\"desktopportraitfontsize\":100,\"desktopportraitmaxwidth\":0,\"desktopportraitinneralign\":\"left\",\"desktopportraitpadding\":\"0|*|0|*|0|*|0|*|px\",\"desktopportraitorder\":0,\"mobileportraitinneralign\":\"center\",\"mobileportraitorder\":1,\"opened\":1,\"id\":\"\",\"uniqueclass\":\"n-uc-LnImbm1HgUAv\",\"generatorvisible\":\"\",\"zindex\":2,\"class\":\"\",\"crop\":\"visible\",\"rotation\":0,\"parallax\":0,\"desktopportrait\":1,\"desktoplandscape\":1,\"tabletportrait\":1,\"tabletlandscape\":1,\"mobileportrait\":1,\"mobilelandscape\":1,\"bgimage\":\"\",\"bgimagex\":50,\"bgimagey\":50,\"bgcolor\":\"00000000\",\"bgcolorgradient\":\"off\",\"bgcolorgradientend\":\"00000000\",\"verticalalign\":\"center\",\"colwidth\":\"3/5\",\"href\":\"\",\"href-target\":\"_self\",\"borderradius\":0,\"boxshadow\":\"0|*|0|*|0|*|0|*|00000080\",\"borderwidth\":\"0|*|0|*|0|*|0\",\"borderstyle\":\"solid\",\"bordercolor\":\"ffffffff\",\"name\":\"Column\",\"namesynced\":1,\"layers\":[{\"type\":\"layer\",\"pm\":\"normal\",\"desktopportraitfontsize\":100,\"desktopportraitmargin\":\"0|*|0|*|0|*|0|*|px\",\"desktopportraitheight\":0,\"desktopportraitmaxwidth\":0,\"desktopportraitselfalign\":\"inherit\",\"mobileportraitmaxwidth\":300,\"id\":\"\",\"uniqueclass\":\"\",\"generatorvisible\":\"\",\"zindex\":2,\"class\":\"\",\"crop\":\"visible\",\"rotation\":0,\"parallax\":0,\"desktopportrait\":1,\"desktoplandscape\":1,\"tabletportrait\":1,\"tabletlandscape\":1,\"mobileportrait\":1,\"mobilelandscape\":1,\"name\":\"Image\",\"namesynced\":1,\"item\":{\"type\":\"image\",\"values\":{\"image\":\"https://smartslider3.com/wp-content/uploads/slider424/background.png\",\"href\":\"#\",\"href-target\":\"_self\",\"href-rel\":\"\",\"size\":\"auto|*|auto\",\"alt\":\"\",\"title\":\"\",\"href-class\":\"\"}}}]}]}]}]\',
\'\',
\'https://smartslider3.com/wp-content/uploads/slider424/slidebackground.jpg\',
\'{\"type\":\"slide\",\"desktopportraitfontsize\":100,\"desktopportraitpadding\":\"10|*|60|*|10|*|60\",\"tabletportraitpadding\":\"10|*|50|*|10|*|50\",\"mobileportraitpadding\":\"10|*|10|*|35|*|10\",\"record-slides\":0,\"thumbnailType\":\"default\",\"static-slide\":0,\"slide-duration\":0,\"ligthboxImage\":\"\",\"background-animation\":\"\",\"background-animation-color\":\"333333ff\",\"background-animation-speed\":\"default\",\"desktopportrait\":1,\"desktoplandscape\":1,\"tabletportrait\":1,\"tabletlandscape\":1,\"mobileportrait\":1,\"mobilelandscape\":1,\"href\":\"\",\"href-target\":\"\",\"background-type\":\"image\",\"backgroundColor\":\"ffffff00\",\"backgroundGradient\":\"off\",\"backgroundColorEnd\":\"ffffff00\",\"backgroundColorOverlay\":0,\"backgroundImage\":\"https://smartslider3.com/wp-content/uploads/slider424/slide1.png\",\"backgroundFocusX\":50,\"backgroundFocusY\":50,\"backgroundImageOpacity\":100,\"backgroundImageBlur\":0,\"backgroundAlt\":\"\",\"backgroundTitle\":\"\",\"backgroundMode\":\"default\",\"guides\":\"eyJob3Jpem9udGFsIjpbXSwidmVydGljYWwiOltdfQ==\",\"version\":\"3.4.0\"}\',
1, 0),
(\'Build & Design\', ' . $sliderID . ',
\'1970-01-01 00:00:00\', \'1970-01-01 00:00:00\', 1, 0,
\'[{\"type\":\"content\",\"pm\":\"default\",\"desktopportraitfontsize\":100,\"desktopportraitmaxwidth\":1120,\"desktopportraitinneralign\":\"inherit\",\"desktopportraitpadding\":\"0|*|0|*|0|*|0|*|px\",\"desktopportraitselfalign\":\"center\",\"opened\":1,\"id\":\"\",\"uniqueclass\":\"n-uc-TPnUuKlAWVoC\",\"generatorvisible\":\"\",\"zindex\":2,\"class\":\"\",\"crop\":\"visible\",\"rotation\":0,\"parallax\":0,\"desktopportrait\":1,\"desktoplandscape\":1,\"tabletportrait\":1,\"tabletlandscape\":1,\"mobileportrait\":1,\"mobilelandscape\":1,\"bgimage\":\"\",\"bgimagex\":50,\"bgimagey\":50,\"bgcolor\":\"00000000\",\"bgcolorgradient\":\"off\",\"bgcolorgradientend\":\"00000000\",\"verticalalign\":\"center\",\"layers\":[{\"type\":\"row\",\"pm\":\"normal\",\"desktopportraitfontsize\":100,\"desktopportraitinneralign\":\"inherit\",\"desktopportraitpadding\":\"10|*|0|*|10|*|0|*|px\",\"desktopportraitgutter\":0,\"desktopportraitwrapafter\":0,\"desktopportraitmargin\":\"0|*|0|*|0|*|0|*|px\",\"desktopportraitheight\":0,\"desktopportraitmaxwidth\":0,\"desktopportraitselfalign\":\"inherit\",\"tabletportraitpadding\":\"10|*|0|*|10|*|0|*|px\",\"tabletportraitgutter\":20,\"mobileportraitinneralign\":\"inherit\",\"mobileportraitpadding\":\"0|*|0|*|0|*|0|*|px\",\"mobileportraitgutter\":20,\"mobileportraitwrapafter\":1,\"mobileportraitmaxwidth\":400,\"mobileportraitselfalign\":\"inherit\",\"mobilelandscapewrapafter\":1,\"opened\":1,\"id\":\"\",\"uniqueclass\":\"n-uc-NmnNQvKK01kO\",\"generatorvisible\":\"\",\"zindex\":2,\"class\":\"\",\"crop\":\"visible\",\"rotation\":0,\"parallax\":0,\"desktopportrait\":1,\"desktoplandscape\":1,\"tabletportrait\":1,\"tabletlandscape\":1,\"mobileportrait\":1,\"mobilelandscape\":1,\"href\":\"\",\"href-target\":\"_self\",\"bgimage\":\"\",\"bgimagex\":50,\"bgimagey\":50,\"bgcolor\":\"ffffff00\",\"bgcolorgradient\":\"off\",\"bgcolorgradientend\":\"00000000\",\"borderwidth\":\"1|*|1|*|1|*|1\",\"borderstyle\":\"none\",\"bordercolor\":\"FFFFFFFF\",\"borderradius\":0,\"boxshadow\":\"0|*|0|*|0|*|0|*|00000080\",\"fullwidth\":1,\"stretch\":0,\"name\":\"Row\",\"namesynced\":1,\"cols\":[{\"type\":\"col\",\"pm\":\"default\",\"desktopportraitfontsize\":100,\"desktopportraitmaxwidth\":0,\"desktopportraitinneralign\":\"left\",\"desktopportraitpadding\":\"10|*|10|*|10|*|10|*|px\",\"desktopportraitorder\":0,\"tabletportraitpadding\":\"10|*|0|*|10|*|0|*|px\",\"mobileportraitmaxwidth\":0,\"mobileportraitinneralign\":\"left\",\"mobileportraitpadding\":\"10|*|0|*|10|*|0|*|px\",\"mobileportraitorder\":2,\"opened\":1,\"id\":\"\",\"uniqueclass\":\"n-uc-R5Jkk06Nmzr4\",\"generatorvisible\":\"\",\"zindex\":2,\"class\":\"\",\"crop\":\"visible\",\"rotation\":0,\"parallax\":0,\"desktopportrait\":1,\"desktoplandscape\":1,\"tabletportrait\":1,\"tabletlandscape\":1,\"mobileportrait\":1,\"mobilelandscape\":1,\"bgimage\":\"\",\"bgimagex\":50,\"bgimagey\":50,\"bgcolor\":\"00000000\",\"bgcolorgradient\":\"off\",\"bgcolorgradientend\":\"00000000\",\"verticalalign\":\"center\",\"colwidth\":\"2/5\",\"href\":\"\",\"href-target\":\"_self\",\"borderradius\":0,\"boxshadow\":\"0|*|0|*|0|*|0|*|00000080\",\"borderwidth\":\"0|*|0|*|0|*|0\",\"borderstyle\":\"solid\",\"bordercolor\":\"ffffffff\",\"name\":\"Column\",\"namesynced\":1,\"layers\":[{\"type\":\"layer\",\"pm\":\"normal\",\"desktopportraitfontsize\":100,\"desktopportraitmargin\":\"0|*|0|*|0|*|0|*|px\",\"desktopportraitheight\":0,\"desktopportraitmaxwidth\":0,\"desktopportraitselfalign\":\"inherit\",\"tabletportraitfontsize\":80,\"mobileportraitfontsize\":60,\"id\":\"\",\"uniqueclass\":\"\",\"generatorvisible\":\"\",\"zindex\":2,\"class\":\"\",\"crop\":\"visible\",\"rotation\":0,\"parallax\":0,\"desktopportrait\":1,\"desktoplandscape\":1,\"tabletportrait\":1,\"tabletlandscape\":1,\"mobileportrait\":1,\"mobilelandscape\":1,\"name\":\"Jeans
Store
Interior\",\"namesynced\":1,\"item\":{\"type\":\"heading\",\"values\":{\"font\":\"{\\\"data\\\":[{\\\"extra\\\":\\\"\\\",\\\"color\\\":\\\"ffffffff\\\",\\\"size\\\":\\\"36||px\\\",\\\"tshadow\\\":\\\"0|*|0|*|0|*|000000ff\\\",\\\"afont\\\":\\\"Roboto\\\",\\\"lineheight\\\":\\\"1.2\\\",\\\"weight\\\":1,\\\"italic\\\":0,\\\"underline\\\":0,\\\"align\\\":\\\"inherit\\\",\\\"letterspacing\\\":\\\"normal\\\",\\\"wordspacing\\\":\\\"normal\\\",\\\"texttransform\\\":\\\"none\\\"},{\\\"extra\\\":\\\"\\\"}]}\",\"style\":\"\",\"priority\":\"div\",\"fullwidth\":\"1\",\"nowrap\":\"0\",\"heading\":\"02.
Build &
Design\",\"title\":\"\",\"href\":\"#\",\"href-target\":\"_self\",\"href-rel\":\"\",\"split-text-transform-origin\":\"50|*|50|*|0\",\"split-text-backface-visibility\":\"1\",\"split-text-animation-in\":\"\",\"split-text-delay-in\":\"0\",\"split-text-animation-out\":\"\",\"split-text-delay-out\":\"0\",\"class\":\"\"}}},{\"type\":\"layer\",\"pm\":\"normal\",\"desktopportraitfontsize\":100,\"desktopportraitmargin\":\"0|*|0|*|0|*|0|*|px\",\"desktopportraitheight\":0,\"desktopportraitmaxwidth\":0,\"desktopportraitselfalign\":\"inherit\",\"tabletportraitfontsize\":80,\"mobileportraitfontsize\":70,\"id\":\"\",\"uniqueclass\":\"\",\"generatorvisible\":\"\",\"zindex\":2,\"class\":\"\",\"crop\":\"visible\",\"rotation\":0,\"parallax\":0,\"desktopportrait\":1,\"desktoplandscape\":1,\"tabletportrait\":1,\"tabletlandscape\":1,\"mobileportrait\":1,\"mobilelandscape\":1,\"name\":\"Lorem
ipsum dolor sit amet,
consect\",\"namesynced\":1,\"item\":{\"type\":\"heading\",\"values\":{\"font\":\"{\\\"data\\\":[{\\\"extra\\\":\\\"\\\",\\\"color\\\":\\\"ffffffb0\\\",\\\"size\\\":\\\"24||px\\\",\\\"tshadow\\\":\\\"0|*|0|*|0|*|000000ff\\\",\\\"afont\\\":\\\"Roboto\\\",\\\"lineheight\\\":\\\"1.3\\\",\\\"weight\\\":300,\\\"italic\\\":0,\\\"underline\\\":0,\\\"align\\\":\\\"inherit\\\",\\\"letterspacing\\\":\\\"normal\\\",\\\"wordspacing\\\":\\\"normal\\\",\\\"texttransform\\\":\\\"none\\\"},{\\\"extra\\\":\\\"\\\"}]}\",\"style\":\"\",\"priority\":\"div\",\"fullwidth\":\"1\",\"nowrap\":\"0\",\"heading\":\"Build
any layout with layers and customize your designs
limitlessly.\",\"title\":\"\",\"href\":\"#\",\"href-target\":\"_self\",\"href-rel\":\"\",\"split-text-transform-origin\":\"50|*|50|*|0\",\"split-text-backface-visibility\":\"1\",\"split-text-animation-in\":\"\",\"split-text-delay-in\":\"0\",\"split-text-animation-out\":\"\",\"split-text-delay-out\":\"0\",\"class\":\"\"}}},{\"type\":\"layer\",\"pm\":\"normal\",\"desktopportraitfontsize\":100,\"desktopportraitmargin\":\"20|*|0|*|0|*|0|*|px\",\"desktopportraitheight\":0,\"desktopportraitmaxwidth\":0,\"desktopportraitselfalign\":\"inherit\",\"tabletportraitfontsize\":100,\"mobileportraitfontsize\":80,\"mobileportraitmargin\":\"10|*|0|*|0|*|0|*|px\",\"id\":\"\",\"uniqueclass\":\"\",\"generatorvisible\":\"\",\"zindex\":2,\"class\":\"\",\"crop\":\"visible\",\"rotation\":0,\"parallax\":0,\"desktopportrait\":1,\"desktoplandscape\":1,\"tabletportrait\":1,\"tabletlandscape\":1,\"mobileportrait\":1,\"mobilelandscape\":1,\"name\":\"Latest
Project\",\"namesynced\":1,\"item\":{\"type\":\"heading\",\"values\":{\"font\":\"{\\\"data\\\":[{\\\"extra\\\":\\\"\\\",\\\"color\\\":\\\"ffffffdb\\\",\\\"size\\\":\\\"14||px\\\",\\\"tshadow\\\":\\\"0|*|0|*|0|*|000000ff\\\",\\\"afont\\\":\\\"Roboto\\\",\\\"lineheight\\\":\\\"1.5\\\",\\\"weight\\\":1,\\\"italic\\\":0,\\\"underline\\\":0,\\\"align\\\":\\\"inherit\\\",\\\"letterspacing\\\":\\\"1px\\\",\\\"wordspacing\\\":\\\"normal\\\",\\\"texttransform\\\":\\\"uppercase\\\"},{\\\"extra\\\":\\\"\\\"}]}\",\"style\":\"\",\"priority\":\"div\",\"fullwidth\":\"1\",\"nowrap\":\"0\",\"heading\":\"Step
1\",\"title\":\"\",\"href\":\"#\",\"href-target\":\"_self\",\"href-rel\":\"\",\"split-text-transform-origin\":\"50|*|50|*|0\",\"split-text-backface-visibility\":\"1\",\"split-text-animation-in\":\"\",\"split-text-delay-in\":\"0\",\"split-text-animation-out\":\"\",\"split-text-delay-out\":\"0\",\"class\":\"\"}}},{\"type\":\"layer\",\"pm\":\"normal\",\"desktopportraitfontsize\":100,\"desktopportraitmargin\":\"0|*|0|*|0|*|0|*|px\",\"desktopportraitheight\":0,\"desktopportraitmaxwidth\":0,\"desktopportraitselfalign\":\"inherit\",\"tabletportraitfontsize\":90,\"mobileportraitfontsize\":70,\"id\":\"\",\"uniqueclass\":\"\",\"generatorvisible\":\"\",\"zindex\":2,\"class\":\"\",\"crop\":\"visible\",\"rotation\":0,\"parallax\":0,\"desktopportrait\":1,\"desktoplandscape\":1,\"tabletportrait\":1,\"tabletlandscape\":1,\"mobileportrait\":1,\"mobilelandscape\":1,\"name\":\"Text\",\"namesynced\":1,\"item\":{\"type\":\"text\",\"values\":{\"font\":\"{\\\"data\\\":[{\\\"extra\\\":\\\"\\\",\\\"color\\\":\\\"ffffffb0\\\",\\\"size\\\":\\\"18||px\\\",\\\"tshadow\\\":\\\"0|*|0|*|0|*|000000ff\\\",\\\"afont\\\":\\\"Roboto\\\",\\\"lineheight\\\":\\\"1.6\\\",\\\"weight\\\":400,\\\"italic\\\":0,\\\"underline\\\":0,\\\"align\\\":\\\"inherit\\\",\\\"letterspacing\\\":\\\"normal\\\",\\\"wordspacing\\\":\\\"normal\\\",\\\"texttransform\\\":\\\"none\\\"},{\\\"extra\\\":\\\"\\\",\\\"color\\\":\\\"1890d7ff\\\"},{\\\"extra\\\":\\\"\\\",\\\"color\\\":\\\"1890d7ff\\\"}]}\",\"style\":\"\",\"content\":\"To
add a layer, click the green plus button in the left sidebar and select the
type of
layer.\",\"content-tablet-enabled\":\"0\",\"contenttablet\":\"\",\"content-mobile-enabled\":\"0\",\"contentmobile\":\"\"}}},{\"type\":\"layer\",\"pm\":\"normal\",\"desktopportraitfontsize\":100,\"desktopportraitmargin\":\"20|*|0|*|0|*|0|*|px\",\"desktopportraitheight\":0,\"desktopportraitmaxwidth\":0,\"desktopportraitselfalign\":\"inherit\",\"tabletportraitfontsize\":100,\"mobileportraitfontsize\":80,\"mobileportraitmargin\":\"10|*|0|*|0|*|0|*|px\",\"id\":\"\",\"uniqueclass\":\"\",\"generatorvisible\":\"\",\"zindex\":2,\"class\":\"\",\"crop\":\"visible\",\"rotation\":0,\"parallax\":0,\"desktopportrait\":1,\"desktoplandscape\":1,\"tabletportrait\":1,\"tabletlandscape\":1,\"mobileportrait\":1,\"mobilelandscape\":1,\"name\":\"Latest
Project\",\"namesynced\":1,\"item\":{\"type\":\"heading\",\"values\":{\"font\":\"{\\\"data\\\":[{\\\"extra\\\":\\\"\\\",\\\"color\\\":\\\"ffffffdb\\\",\\\"size\\\":\\\"14||px\\\",\\\"tshadow\\\":\\\"0|*|0|*|0|*|000000ff\\\",\\\"afont\\\":\\\"Roboto\\\",\\\"lineheight\\\":\\\"1.5\\\",\\\"weight\\\":1,\\\"italic\\\":0,\\\"underline\\\":0,\\\"align\\\":\\\"inherit\\\",\\\"letterspacing\\\":\\\"1px\\\",\\\"wordspacing\\\":\\\"normal\\\",\\\"texttransform\\\":\\\"uppercase\\\"},{\\\"extra\\\":\\\"\\\"}]}\",\"style\":\"\",\"priority\":\"div\",\"fullwidth\":\"1\",\"nowrap\":\"0\",\"heading\":\"Step
2\",\"title\":\"\",\"href\":\"#\",\"href-target\":\"_self\",\"href-rel\":\"\",\"split-text-transform-origin\":\"50|*|50|*|0\",\"split-text-backface-visibility\":\"1\",\"split-text-animation-in\":\"\",\"split-text-delay-in\":\"0\",\"split-text-animation-out\":\"\",\"split-text-delay-out\":\"0\",\"class\":\"\"}}},{\"type\":\"layer\",\"pm\":\"normal\",\"desktopportraitfontsize\":100,\"desktopportraitmargin\":\"0|*|0|*|0|*|0|*|px\",\"desktopportraitheight\":0,\"desktopportraitmaxwidth\":0,\"desktopportraitselfalign\":\"inherit\",\"tabletportraitfontsize\":90,\"mobileportraitfontsize\":70,\"id\":\"\",\"uniqueclass\":\"\",\"generatorvisible\":\"\",\"zindex\":2,\"class\":\"\",\"crop\":\"visible\",\"rotation\":0,\"parallax\":0,\"desktopportrait\":1,\"desktoplandscape\":1,\"tabletportrait\":1,\"tabletlandscape\":1,\"mobileportrait\":1,\"mobilelandscape\":1,\"name\":\"Text\",\"namesynced\":1,\"item\":{\"type\":\"text\",\"values\":{\"font\":\"{\\\"data\\\":[{\\\"extra\\\":\\\"\\\",\\\"color\\\":\\\"ffffffb0\\\",\\\"size\\\":\\\"18||px\\\",\\\"tshadow\\\":\\\"0|*|0|*|0|*|000000ff\\\",\\\"afont\\\":\\\"Roboto\\\",\\\"lineheight\\\":\\\"1.6\\\",\\\"weight\\\":400,\\\"italic\\\":0,\\\"underline\\\":0,\\\"align\\\":\\\"inherit\\\",\\\"letterspacing\\\":\\\"normal\\\",\\\"wordspacing\\\":\\\"normal\\\",\\\"texttransform\\\":\\\"none\\\"},{\\\"extra\\\":\\\"\\\",\\\"color\\\":\\\"1890d7ff\\\"},{\\\"extra\\\":\\\"\\\",\\\"color\\\":\\\"1890d7ff\\\"}]}\",\"style\":\"\",\"content\":\"Select
any layer and you can edit its content and style properties in the layer
window.\",\"content-tablet-enabled\":\"0\",\"contenttablet\":\"\",\"content-mobile-enabled\":\"0\",\"contentmobile\":\"\"}}},{\"type\":\"layer\",\"pm\":\"normal\",\"desktopportraitfontsize\":100,\"desktopportraitmargin\":\"20|*|0|*|0|*|0|*|px\",\"desktopportraitheight\":0,\"desktopportraitmaxwidth\":0,\"desktopportraitselfalign\":\"inherit\",\"tabletportraitfontsize\":80,\"mobileportraitfontsize\":80,\"mobileportraitmargin\":\"10|*|0|*|0|*|0|*|px\",\"id\":\"\",\"uniqueclass\":\"\",\"generatorvisible\":\"\",\"zindex\":2,\"class\":\"\",\"crop\":\"visible\",\"rotation\":0,\"parallax\":0,\"desktopportrait\":1,\"desktoplandscape\":1,\"tabletportrait\":1,\"tabletlandscape\":1,\"mobileportrait\":1,\"mobilelandscape\":1,\"name\":\"Read
More\",\"namesynced\":1,\"item\":{\"type\":\"button\",\"values\":{\"font\":\"{\\\"data\\\":[{\\\"extra\\\":\\\"\\\",\\\"color\\\":\\\"ffffffff\\\",\\\"size\\\":\\\"14||px\\\",\\\"tshadow\\\":\\\"0|*|0|*|0|*|000000ff\\\",\\\"afont\\\":\\\"Roboto\\\",\\\"lineheight\\\":\\\"1.5\\\",\\\"weight\\\":1,\\\"italic\\\":0,\\\"underline\\\":0,\\\"align\\\":\\\"center\\\",\\\"letterspacing\\\":\\\"1px\\\",\\\"wordspacing\\\":\\\"normal\\\",\\\"texttransform\\\":\\\"none\\\"},{\\\"extra\\\":\\\"\\\",\\\"color\\\":\\\"0568f6ff\\\"}]}\",\"style\":\"{\\\"data\\\":[{\\\"extra\\\":\\\"\\\",\\\"backgroundcolor\\\":\\\"0568f6ff\\\",\\\"opacity\\\":100,\\\"padding\\\":\\\"1|*|2|*|1|*|2|*|em\\\",\\\"boxshadow\\\":\\\"0|*|0|*|0|*|0|*|000000ff\\\",\\\"border\\\":\\\"0|*|solid|*|000000ff\\\",\\\"borderradius\\\":\\\"5\\\"},{\\\"extra\\\":\\\"\\\",\\\"backgroundcolor\\\":\\\"ffffffff\\\"}]}\",\"content\":\"Next
Slide\",\"nowrap\":\"1\",\"fullwidth\":\"0\",\"href\":\"NextSlide[]\",\"href-target\":\"_self\",\"href-rel\":\"\",\"class\":\"\",\"icon\":\"\",\"iconsize\":\"100\",\"iconspacing\":\"30\",\"iconplacement\":\"left\"}}}]},{\"type\":\"col\",\"pm\":\"default\",\"desktopportraitfontsize\":100,\"desktopportraitmaxwidth\":0,\"desktopportraitinneralign\":\"left\",\"desktopportraitpadding\":\"0|*|0|*|0|*|0|*|px\",\"desktopportraitorder\":0,\"mobileportraitinneralign\":\"center\",\"mobileportraitorder\":1,\"opened\":1,\"id\":\"\",\"uniqueclass\":\"n-uc-iYi6ZKk8yeVp\",\"generatorvisible\":\"\",\"zindex\":2,\"class\":\"\",\"crop\":\"visible\",\"rotation\":0,\"parallax\":0,\"desktopportrait\":1,\"desktoplandscape\":1,\"tabletportrait\":1,\"tabletlandscape\":1,\"mobileportrait\":1,\"mobilelandscape\":1,\"bgimage\":\"\",\"bgimagex\":50,\"bgimagey\":50,\"bgcolor\":\"00000000\",\"bgcolorgradient\":\"off\",\"bgcolorgradientend\":\"00000000\",\"verticalalign\":\"center\",\"colwidth\":\"3/5\",\"href\":\"\",\"href-target\":\"_self\",\"borderradius\":0,\"boxshadow\":\"0|*|0|*|0|*|0|*|00000080\",\"borderwidth\":\"0|*|0|*|0|*|0\",\"borderstyle\":\"solid\",\"bordercolor\":\"ffffffff\",\"name\":\"Column\",\"namesynced\":1,\"layers\":[{\"type\":\"layer\",\"pm\":\"normal\",\"desktopportraitfontsize\":100,\"desktopportraitmargin\":\"0|*|0|*|0|*|0|*|px\",\"desktopportraitheight\":0,\"desktopportraitmaxwidth\":0,\"desktopportraitselfalign\":\"inherit\",\"mobileportraitmaxwidth\":300,\"id\":\"\",\"uniqueclass\":\"\",\"generatorvisible\":\"\",\"zindex\":2,\"class\":\"\",\"crop\":\"visible\",\"rotation\":0,\"parallax\":0,\"desktopportrait\":1,\"desktoplandscape\":1,\"tabletportrait\":1,\"tabletlandscape\":1,\"mobileportrait\":1,\"mobilelandscape\":1,\"name\":\"Image\",\"namesynced\":1,\"item\":{\"type\":\"image\",\"values\":{\"image\":\"https://smartslider3.com/wp-content/uploads/slider424/buildanddesign.png\",\"href\":\"#\",\"href-target\":\"_self\",\"href-rel\":\"\",\"size\":\"auto|*|auto\",\"alt\":\"\",\"title\":\"\",\"href-class\":\"\"}}}]}]}]}]\',
\'\',
\'https://smartslider3.com/wp-content/uploads/slider424/buildanddesign.jpg\',
\'{\"type\":\"slide\",\"desktopportraitfontsize\":100,\"desktopportraitpadding\":\"10|*|60|*|10|*|60\",\"tabletportraitpadding\":\"10|*|50|*|10|*|50\",\"mobileportraitpadding\":\"10|*|10|*|35|*|10\",\"record-slides\":0,\"thumbnailType\":\"default\",\"static-slide\":0,\"slide-duration\":0,\"ligthboxImage\":\"\",\"background-animation\":\"\",\"background-animation-color\":\"333333ff\",\"background-animation-speed\":\"default\",\"desktopportrait\":1,\"desktoplandscape\":1,\"tabletportrait\":1,\"tabletlandscape\":1,\"mobileportrait\":1,\"mobilelandscape\":1,\"href\":\"\",\"href-target\":\"\",\"background-type\":\"image\",\"backgroundColor\":\"ffffff00\",\"backgroundGradient\":\"off\",\"backgroundColorEnd\":\"ffffff00\",\"backgroundColorOverlay\":0,\"backgroundImage\":\"https://smartslider3.com/wp-content/uploads/slider424/slide2.png\",\"backgroundFocusX\":50,\"backgroundFocusY\":50,\"backgroundImageOpacity\":100,\"backgroundImageBlur\":0,\"backgroundAlt\":\"\",\"backgroundTitle\":\"\",\"backgroundMode\":\"default\",\"guides\":\"eyJob3Jpem9udGFsIjpbXSwidmVydGljYWwiOltdfQ==\",\"version\":\"3.4.0\"}\',
2, 0);
'));
}
return true;
}
}PK9e�[Ro^}}
Install/Joomla/InstallJoomla.phpnu�[���<?php
namespace Nextend\SmartSlider3\Install\Joomla;
class InstallJoomla {
public static function install() {
}
}PK9e�[O?�7'7'Install/Tables.phpnu�[���<?php
namespace Nextend\SmartSlider3\Install;
use Nextend\Framework\Database\Database;
use Nextend\Framework\Notification\Notification;
class Tables {
protected $tables = array(
'nextend2_image_storage' => "(
`id` INT(11) NOT NULL AUTO_INCREMENT,
`hash` VARCHAR(32) NOT NULL,
`image` TEXT NOT NULL,
`value` MEDIUMTEXT NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `hash` (`hash`)
)",
'nextend2_section_storage' => "(
`id` INT(11) NOT NULL AUTO_INCREMENT,
`application` VARCHAR(20) NOT NULL,
`section` VARCHAR(128) NOT NULL,
`referencekey` VARCHAR(128) DEFAULT '',
`value` MEDIUMTEXT NOT NULL,
`system` INT(11) NOT NULL DEFAULT '0',
`editable` INT(11) NOT NULL DEFAULT '1',
PRIMARY KEY (`id`),
KEY `application` (`application`, `section`(50),
`referencekey`(50)),
KEY `application_2` (`application`, `section`(50)),
INDEX (`system`),
INDEX (`editable`)
)
AUTO_INCREMENT = 10000",
'nextend2_smartslider3_generators' => "(
`id` INT(11) NOT NULL AUTO_INCREMENT,
`group` VARCHAR(254) NOT NULL,
`type` VARCHAR(254) NOT NULL,
`params` TEXT NOT NULL,
PRIMARY KEY (`id`)
)",
'nextend2_smartslider3_sliders' => "(
`id` INT(11) NOT NULL AUTO_INCREMENT,
`alias` VARCHAR(255) NULL DEFAULT NULL,
`title` VARCHAR(100) NOT NULL,
`type` VARCHAR(30) NOT NULL,
`params` MEDIUMTEXT NOT NULL,
`status` VARCHAR(50) NOT NULL DEFAULT 'published',
`time` DATETIME NOT NULL,
`thumbnail` VARCHAR( 255 ) NOT NULL,
`ordering` INT NOT NULL DEFAULT '0',
INDEX (`status`),
INDEX (`time`),
PRIMARY KEY (`id`)
)",
'nextend2_smartslider3_sliders_xref' => "(
`group_id` int(11) NOT NULL,
`slider_id` int(11) NOT NULL,
`ordering` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`group_id`,`slider_id`),
INDEX (`ordering`)
)",
'nextend2_smartslider3_slides' => "(
`id` INT(11) NOT NULL AUTO_INCREMENT,
`title` VARCHAR(200) NOT NULL,
`slider` INT(11) NOT NULL,
`publish_up` DATETIME NOT NULL default '1970-01-01
00:00:00',
`publish_down` DATETIME NOT NULL default '1970-01-01
00:00:00',
`published` TINYINT(1) NOT NULL,
`first` INT(11) NOT NULL,
`slide` LONGTEXT,
`description` TEXT NOT NULL,
`thumbnail` VARCHAR(255) NOT NULL,
`params` TEXT NOT NULL,
`ordering` INT(11) NOT NULL,
`generator_id` INT(11) NOT NULL,
PRIMARY KEY (`id`),
INDEX (`published`),
INDEX (`publish_up`),
INDEX (`publish_down`),
INDEX (`generator_id`),
KEY `thumbnail` (`thumbnail`(100)),
INDEX (`ordering`),
INDEX (`slider`)
)"
);
public function install() {
foreach ($this->tables as $tableName => $structure) {
$this->installTable($tableName, $structure);
}
$hasIndex = Database::queryRow(Database::parsePrefix("SHOW
INDEXES FROM `#__nextend2_section_storage` WHERE Key_name =
'application'"));
if ($hasIndex) {
$this->query("ALTER TABLE `#__nextend2_section_storage`
DROP INDEX `application`");
}
$hasIndex = Database::queryRow(Database::parsePrefix("SHOW
INDEXES FROM `#__nextend2_section_storage` WHERE Key_name =
'application_2'"));
if ($hasIndex) {
$this->query("ALTER TABLE `#__nextend2_section_storage`
DROP INDEX `application_2`");
}
$this->query("ALTER TABLE `#__nextend2_section_storage`
CHANGE `section` `section` VARCHAR( 128 ) NOT NULL");
$this->query("ALTER TABLE `#__nextend2_section_storage`
CHANGE `referencekey` `referencekey` VARCHAR( 128 ) NOT NULL");
$this->query("ALTER TABLE `#__nextend2_section_storage` ADD
INDEX `application` (`application`, `section`(50),
`referencekey`(50))");
$this->query("ALTER TABLE `#__nextend2_section_storage` ADD
INDEX `application_2` (`application`, `section`(50))");
self::fixIndex('#__nextend2_section_storage',
'system');
self::fixIndex('#__nextend2_section_storage',
'editable');
if
(!$this->hasColumn('#__nextend2_smartslider3_sliders',
'thumbnail')) {
$this->query("ALTER TABLE
`#__nextend2_smartslider3_sliders` ADD `thumbnail` VARCHAR( 255 ) NOT
NULL");
}
if
(!$this->hasColumn('#__nextend2_smartslider3_sliders',
'ordering')) {
$this->query("ALTER TABLE
`#__nextend2_smartslider3_sliders` ADD `ordering` INT NOT NULL DEFAULT
'0'");
}
if
(!$this->hasColumn('#__nextend2_smartslider3_sliders',
'alias')) {
$this->query("ALTER TABLE
`#__nextend2_smartslider3_sliders` ADD `alias` VARCHAR( 255 ) NULL DEFAULT
NULL");
}
if
(!$this->hasColumn('#__nextend2_smartslider3_sliders',
'status')) {
$this->query("ALTER TABLE
`#__nextend2_smartslider3_sliders` ADD `status` VARCHAR(50) NOT NULL
DEFAULT 'published', ADD INDEX `status` (`status`)");
}
self::fixIndex('#__nextend2_smartslider3_sliders',
'status');
self::fixIndex('#__nextend2_smartslider3_sliders',
'time');
self::fixIndex('#__nextend2_smartslider3_sliders_xref',
'ordering');
$this->query("ALTER TABLE `#__nextend2_smartslider3_slides`
CHANGE `publish_up` `publish_up` DATETIME NOT NULL DEFAULT '1970-01-01
00:00:00'");
$this->query("ALTER TABLE `#__nextend2_smartslider3_slides`
CHANGE `publish_down` `publish_down` DATETIME NOT NULL DEFAULT
'1970-01-01 00:00:00'");
/**
* Fix automated publish down dates
*
* @todo Remove this in 2021
*/
$this->query("UPDATE `#__nextend2_smartslider3_slides` SET
`publish_down` = '1970-01-01 00:00:00' WHERE `publish_down` >
'2023-04-02 00:00:00'");
$this->query("DELETE FROM `#__nextend2_section_storage`
WHERE `application` LIKE 'smartslider' AND `section` LIKE
'sliderChanged'");
self::fixIndex('#__nextend2_smartslider3_slides',
'published');
self::fixIndex('#__nextend2_smartslider3_slides',
'publish_up');
self::fixIndex('#__nextend2_smartslider3_slides',
'publish_down');
self::fixIndex('#__nextend2_smartslider3_slides',
'generator_id');
$hasIndex = Database::queryRow(Database::parsePrefix("SHOW
INDEXES FROM `#__nextend2_smartslider3_slides` WHERE Key_name =
'thumbnail'"));
if ($hasIndex) {
$this->query("ALTER TABLE
`#__nextend2_smartslider3_slides` DROP INDEX `thumbnail`");
}
$this->query("ALTER TABLE `#__nextend2_smartslider3_slides`
ADD INDEX `thumbnail` (`thumbnail`(100))");
self::fixIndex('#__nextend2_smartslider3_slides',
'ordering');
self::fixIndex('#__nextend2_smartslider3_slides',
'slider');
if(Notification::hasErrors()){
Notification::displayPlainErrors();
exit;
}
}
private function installTable($tableName, $structure) {
$query = 'CREATE TABLE IF NOT EXISTS `' .
Database::getPrefix() . $tableName . '` ';
$query .= $structure;
$query .= ' ' . Database::getCharsetCollate();
$this->query($query);
}
private function query($query) {
Database::query(Database::parsePrefix($query));
}
private function hasColumn($table, $col) {
return !!Database::queryRow(Database::parsePrefix("SHOW
COLUMNS FROM `" . $table . "` LIKE '" . $col .
"'"));
}
public static function repair() {
self::fixPrimaryKey('#__nextend2_section_storage',
'id', true);
self::fixPrimaryKey('#__nextend2_image_storage',
'id', true);
self::fixPrimaryKey('#__nextend2_smartslider3_generators',
'id', true);
self::fixPrimaryKey('#__nextend2_smartslider3_sliders',
'id', true);
self::fixPrimaryKey('#__nextend2_smartslider3_slides',
'id', true);
self::fixPrimaryKey('#__nextend2_smartslider3_sliders_xref',
array(
'slider_id',
'group_id'
));
}
/**
* @param string $tableName
* @param array|string $colNames
* @param bool $autoIncrement
*/
private static function fixPrimaryKey($tableName, $colNames,
$autoIncrement = false) {
if (!is_array($colNames)) {
$colNames = array($colNames);
}
$tableName = Database::parsePrefix($tableName);
Database::query('DELETE FROM ' . $tableName . '
WHERE ' . $colNames[0] . ' = 0;');
$hasIndex = Database::queryRow("SHOW INDEXES FROM " .
$tableName . " WHERE Key_name = 'PRIMARY'");
if (!$hasIndex) {
Database::query('ALTER TABLE ' . $tableName . '
ADD PRIMARY KEY(' . implode(', ', $colNames) .
');');
}
if (count($colNames) == 0 && $autoIncrement) {
Database::query('ALTER TABLE ' . $tableName . '
MODIFY `' . $colNames . '` INT NOT NULL AUTO_INCREMENT;');
}
}
private static function fixIndex($tableName, $colName) {
$tableName = Database::parsePrefix($tableName);
$hasIndex = Database::queryRow("SHOW INDEXES FROM " .
$tableName . " WHERE Key_name = '" . $colName .
"'");
if (!$hasIndex) {
Database::query("ALTER TABLE " . $tableName . "
ADD INDEX `" . $colName . "` (`" . $colName .
"`)");
}
}
}PK9e�[�ڛ88Parser/Link/NextSlide.phpnu�[���<?php
namespace Nextend\SmartSlider3\Parser\Link;
use Nextend\Framework\Parser\Link\ParserInterface;
class NextSlide implements ParserInterface {
public function parse($argument, &$attributes) {
$attributes['onclick'] =
"n2ss.applyActionWithClick(event, 'next');";
return '#';
}
}PK9e�[&�״@@Parser/Link/PreviousSlide.phpnu�[���<?php
namespace Nextend\SmartSlider3\Parser\Link;
use Nextend\Framework\Parser\Link\ParserInterface;
class PreviousSlide implements ParserInterface {
public function parse($argument, &$attributes) {
$attributes['onclick'] =
"n2ss.applyActionWithClick(event, 'previous');";
return '#';
}
}PK9e�[�o#G??Parser/Link/SlideEvent.phpnu�[���<?php
namespace Nextend\SmartSlider3\Parser\Link;
use Nextend\Framework\Parser\Link\ParserInterface;
class SlideEvent implements ParserInterface {
public function parse($argument, &$attributes) {
$attributes['onclick'] = "n2ss.trigger(this,
'" . $argument . "', event);";
return '#';
}
}PK9e�[D4QqqParser/Link/ToSlide.phpnu�[���<?php
namespace Nextend\SmartSlider3\Parser\Link;
use Nextend\Framework\Parser\Link\ParserInterface;
class ToSlide implements ParserInterface {
public function parse($argument, &$attributes) {
preg_match('/([0-9]+)(,([0-1]))?/', $argument, $matches);
if (!isset($matches[3])) {
$attributes['onclick'] =
"n2ss.applyActionWithClick(event, 'slide', " .
(intval($matches[1]) - 1) . ");";
} else {
$attributes['onclick'] =
"n2ss.applyActionWithClick(event, 'slide', " .
(intval($matches[1]) - 1) . ", " . intval($matches[3]) .
");";
}
return '#';
}
}PK9e�[���ooParser/Link/ToSlideID.phpnu�[���<?php
namespace Nextend\SmartSlider3\Parser\Link;
use Nextend\Framework\Parser\Link\ParserInterface;
class ToSlideID implements ParserInterface {
public function parse($argument, &$attributes) {
preg_match('/([0-9]+)(,([0-1]))?/', $argument, $matches);
if (!isset($matches[3])) {
$attributes['onclick'] =
"n2ss.applyActionWithClick(event, 'slideToID', " .
intval($matches[1]) . ");";
} else {
$attributes['onclick'] =
"n2ss.applyActionWithClick(event, 'slideToID', " .
intval($matches[1]) . ", " . intval($matches[3]) .
");";
}
return '#';
}
}PK9e�[ ��i??)Platform/AbstractSmartSlider3Platform.phpnu�[���<?php
namespace Nextend\SmartSlider3\Platform;
use Nextend\Framework\Pattern\GetAssetsPathTrait;
use Nextend\Framework\Pattern\SingletonTrait;
abstract class AbstractSmartSlider3Platform {
use SingletonTrait, GetAssetsPathTrait;
public abstract function start();
/**
* @return string
*/
public abstract function getAdminUrl();
/**
* @return string
*/
public abstract function getAdminAjaxUrl();
/**
* @return string
*/
public function getNetworkAdminUrl() {
return $this->getAdminUrl();
}
}PK9e�[YJ�- - *Platform/Joomla/AdministratorComponent.phpnu�[���<?php
namespace Nextend\SmartSlider3\Platform\Joomla;
use JAccessExceptionNotallowed;
use JFactory;
use JPluginHelper;
use JText;
use JUri;
use Nextend\Framework\PageFlow;
use Nextend\SmartSlider3\Application\ApplicationSmartSlider3;
use Nextend\SmartSlider3\Install\Install;
use Nextend\SmartSlider3\Settings;
use Nextend\SmartSlider3\SmartSlider3Info;
use plgSystemSmartSlider3;
class AdministratorComponent {
public function __construct() {
$this->checkAcl();
if (!isset($_GET['keepalive'])) {
/**
* Required for the license activation to work.
*/
\Joomla\CMS\Factory::getApplication()
->setHeader('cross-origin-opener-policy',
'unsafe-none', true);
$this->loadSystemPlugins();
if (Settings::get('n2_ss3_version') !=
SmartSlider3Info::$completeVersion) {
Install::install();
}
$applicationType = ApplicationSmartSlider3::getInstance()
->getApplicationTypeAdmin();
$isAjax = isset($_GET['nextendajax']) &&
$_GET['nextendajax'];
$applicationType->processRequest('sliders',
'gettingstarted', $isAjax);
?>
<script>
_N2.r('$', function () {
var $ = _N2.$;
var __keepAlive = function () {
$.get('<?php echo
JURI::current();?>?option=com_smartslider3&keepalive=1',
function () {
setTimeout(__keepAlive, 300000);
});
};
setTimeout(__keepAlive, 300000);
});
</script>
<?php
PageFlow::markApplicationEnd();
}
}
protected function checkAcl() {
if (!JFactory::getUser()
->authorise('core.manage',
'com_smartslider3')) {
throw new
JAccessExceptionNotallowed(JText::_('JERROR_ALERTNOAUTHOR'),
403);
}
}
protected function loadSystemPlugins() {
if (!class_exists('plgSystemSmartSlider3')) {
$plugin = JPluginHelper::getPlugin('system',
'smartslider3');
new plgSystemSmartSlider3(JoomlaShim::getDispatcher(),
(array)($plugin));
}
}
}PK9e�[X�`��Platform/Joomla/compat.phpnu�[���<?php
use Nextend\SmartSlider3\Application\ApplicationSmartSlider3;
function nextend_smartslider3($sliderId, $usage = 'Used in PHP')
{
$applicationTypeFrontend = ApplicationSmartSlider3::getInstance()
->getApplicationTypeFrontend();
$applicationTypeFrontend->process('slider',
'display', false, array(
'sliderID' => $sliderId,
'usage' => $usage
));
}PK9e�[��omm!Platform/Joomla/ImageFallback.phpnu�[���<?php
namespace Nextend\SmartSlider3\Platform\Joomla;
use JURI;
use Nextend\Framework\Filesystem\Filesystem;
class ImageFallback {
static public function fallback($imageVars, $textVars = array(), $root
= '') {
$root = self::fixRoot($root);
$return = '';
foreach ($imageVars as $image) {
if (!empty($image)) {
$return = self::getImage($image, $root);
if (!empty($return)) {
break;
}
}
}
if ($return == '' && !empty($textVars)) {
foreach ($textVars as $text) {
$imageInText = self::findImage($text);
if (!empty($imageInText)) {
$return = self::getImage($imageInText, $root);
if ($return != '$/') {
break;
} else {
$return = '';
}
}
}
}
return $return;
}
static public function fixRoot($root) {
if (substr($root, 0, 5) != 'http:' &&
substr($root, 0, 6) != 'https:') {
$root = self::siteURL();
}
return self::removeSlashes($root);
}
static public function getImage($image, $root) {
$imageUrl = self::httpLink($image, $root);
if (self::isExternal($imageUrl) || self::imageUrlExists($imageUrl))
{
return $imageUrl;
} else {
return '';
}
}
static public function findImage($s) {
preg_match_all('/(<img.*?src=[\'"](.*?)[\'"][^>]*>)|(background(-image)??\s*?:.*?url\((["|\']?)?(.+?)(["|\']?)?\))/i',
$s, $r);
if (isset($r[2]) && !empty($r[2][0])) {
$s = $r[2][0];
} else if (isset($r[6]) && !empty($r[6][0])) {
$s = trim($r[6][0], "'\" \t\n\r\0\x0B");
} else {
$s = '';
}
return $s;
}
static public function removeSlashes($text, $right = true) {
if ($right) {
return rtrim($text, '/\\');
} else {
return ltrim($text, '/\\');
}
}
static public function siteURL() {
return JURI::root(false);
}
static public function isExternal($url) {
$url = str_replace(array(
'http:',
'https:',
'//',
'\\\\'
), '', $url);
$domain = $_SERVER['HTTP_HOST'];
return !(substr($url, 0, strlen($domain)) === $domain);
}
static public function httpLink($image, $root) {
if (substr($image, 0, 5) != 'http:' &&
substr($image, 0, 6) != 'https:' && substr($image, 0, 2)
!= '//' && substr($image, 0, 2) != '\\\\') {
return $root . '/' . self::removeSlashes($image,
false);
} else {
return $image;
}
}
static public function imageUrlExists($imageUrl) {
if (substr($imageUrl, 0, 2) == '//' || substr($imageUrl,
0, 2) == '\\\\') {
$imageUrl = (empty($_SERVER['HTTPS']) ?
"http:" : "https:") . $imageUrl;
}
return
Filesystem::existsFile(Filesystem::absoluteURLToPath($imageUrl));
}
}PK9e�[�_�8�(�(!Platform/Joomla/Joomla3Assets.phpnu�[���<?php
namespace Nextend\SmartSlider3\Platform\Joomla;
use JDocumentHTML;
use JFactory;
class Joomla3Assets {
/**
* @var JDocumentHTML
*/
private $document;
private $original = array();
private $updates = array();
public function __construct() {
$this->document = JFactory::getDocument();
$this->original['_styleSheets'] =
$this->document->_styleSheets;
$this->original['_style'] =
$this->document->_style;
$this->original['_scripts'] =
$this->document->_scripts;
$this->original['_script'] =
$this->document->_script;
$this->document->_style = array();
$this->document->_script = array();
}
public function process() {
$this->updates['_styleSheets'] =
array_diff_key($this->document->_styleSheets,
$this->original['_styleSheets']);
$this->updates['_style'] =
$this->document->_style;
$this->updates['_scripts'] =
array_diff_key($this->document->_scripts,
$this->original['_scripts']);
$this->updates['_script'] =
$this->document->_script;
$this->document->_style =
$this->original['_style'];
$this->document->_script =
$this->original['_script'];
}
/**
* Based on JDocumentRendererHead
*
* @return string
*/
public function renderHead() {
if (get_class($this->document) ===
'Joomla\CMS\Document\HtmlDocument') {
$lnEnd = $this->document->_getLineEnd();
$tab = $this->document->_getTab();
$tagEnd = ' >';
$buffer = '';
$mediaVersion = $this->document->getMediaVersion();
$defaultCssMimes = array('text/css');
// Generate stylesheet links
foreach ($this->updates['_styleSheets'] as $src
=> $attribs) {
// Check if stylesheet uses IE conditional statements.
$conditional = isset($attribs['options'])
&& isset($attribs['options']['conditional']) ?
$attribs['options']['conditional'] : null;
// Check if script uses media version.
if
(isset($attribs['options']['version']) &&
$attribs['options']['version'] && strpos($src,
'?') === false && ($mediaVersion ||
$attribs['options']['version'] !== 'auto')) {
$src .= '?' .
($attribs['options']['version'] === 'auto' ?
$mediaVersion : $attribs['options']['version']);
}
$buffer .= $tab;
// This is for IE conditional statements support.
if (!is_null($conditional)) {
$buffer .= '<!--[if ' . $conditional .
']>';
}
$buffer .= '<link href="' . $src .
'" rel="stylesheet"';
// Add script tag attributes.
foreach ($attribs as $attrib => $value) {
// Don't add the 'options' attribute.
This attribute is for internal use (version, conditional, etc).
if ($attrib === 'options') {
continue;
}
// Don't add type attribute if document is HTML5
and it's a default mime type. 'mime' is for B/C.
if (in_array($attrib, array(
'type',
'mime'
)) && $this->document->isHtml5()
&& in_array($value, $defaultCssMimes)) {
continue;
}
// Don't add type attribute if document is HTML5
and it's a default mime type. 'mime' is for B/C.
if ($attrib === 'mime') {
$attrib = 'type';
}
// Add attribute to script tag output.
$buffer .= ' ' . htmlspecialchars($attrib,
ENT_COMPAT, 'UTF-8');
// Json encode value if it's an array.
$value = !is_scalar($value) ? json_encode($value) :
$value;
$buffer .= '="' .
htmlspecialchars($value, ENT_COMPAT, 'UTF-8') .
'"';
}
$buffer .= $tagEnd;
// This is for IE conditional statements support.
if (!is_null($conditional)) {
$buffer .= '<![endif]-->';
}
$buffer .= $lnEnd;
}
// Generate stylesheet declarations
foreach ($this->updates['_style'] as $type =>
$content) {
$buffer .= $tab . '<style';
if (!is_null($type) &&
(!$this->document->isHtml5() || !in_array($type, $defaultCssMimes)))
{
$buffer .= ' type="' . $type .
'"';
}
$buffer .= '>' . $lnEnd;
// This is for full XHTML support.
if ($this->document->_mime != 'text/html')
{
$buffer .= $tab . $tab . '/*<![CDATA[*/' .
$lnEnd;
}
$buffer .= $content . $lnEnd;
// See above note
if ($this->document->_mime != 'text/html')
{
$buffer .= $tab . $tab . '/*]]>*/' .
$lnEnd;
}
$buffer .= $tab . '</style>' . $lnEnd;
}
// Generate scripts options
$scriptOptions = $this->document->getScriptOptions();
if (!empty($scriptOptions)) {
$buffer .= $tab . '<script
type="application/json" class="joomla-script-options
new">';
$prettyPrint = (JDEBUG &&
defined('JSON_PRETTY_PRINT') ? JSON_PRETTY_PRINT : false);
$jsonOptions = json_encode($scriptOptions, $prettyPrint);
$jsonOptions = $jsonOptions ? $jsonOptions :
'{}';
$buffer .= $jsonOptions;
$buffer .= '</script>' . $lnEnd;
}
$defaultJsMimes = array(
'text/javascript',
'application/javascript',
'text/x-javascript',
'application/x-javascript'
);
$html5NoValueAttributes = array(
'defer',
'async'
);
foreach ($this->updates['_scripts'] as $src =>
$attribs) {
// Check if script uses IE conditional statements.
$conditional = isset($attribs['options'])
&& isset($attribs['options']['conditional']) ?
$attribs['options']['conditional'] : null;
// Check if script uses media version.
if
(isset($attribs['options']['version']) &&
$attribs['options']['version'] && strpos($src,
'?') === false && ($mediaVersion ||
$attribs['options']['version'] !== 'auto')) {
$src .= '?' .
($attribs['options']['version'] === 'auto' ?
$mediaVersion : $attribs['options']['version']);
}
$buffer .= $tab;
// This is for IE conditional statements support.
if (!is_null($conditional)) {
$buffer .= '<!--[if ' . $conditional .
']>';
}
$buffer .= '<script src="' . $src .
'"';
// Add script tag attributes.
foreach ($attribs as $attrib => $value) {
// Don't add the 'options' attribute.
This attribute is for internal use (version, conditional, etc).
if ($attrib === 'options') {
continue;
}
// Don't add type attribute if document is HTML5
and it's a default mime type. 'mime' is for B/C.
if (in_array($attrib, array(
'type',
'mime'
)) && $this->document->isHtml5()
&& in_array($value, $defaultJsMimes)) {
continue;
}
// B/C: If defer and async is false or empty don't
render the attribute.
if (in_array($attrib, array(
'defer',
'async'
)) && !$value) {
continue;
}
// Don't add type attribute if document is HTML5
and it's a default mime type. 'mime' is for B/C.
if ($attrib === 'mime') {
$attrib = 'type';
} // B/C defer and async can be set to yes when using
the old method.
else if (in_array($attrib, array(
'defer',
'async'
)) && $value === true) {
$value = $attrib;
}
// Add attribute to script tag output.
$buffer .= ' ' . htmlspecialchars($attrib,
ENT_COMPAT, 'UTF-8');
if (!($this->document->isHtml5() &&
in_array($attrib, $html5NoValueAttributes))) {
// Json encode value if it's an array.
$value = !is_scalar($value) ? json_encode($value) :
$value;
$buffer .= '="' .
htmlspecialchars($value, ENT_COMPAT, 'UTF-8') .
'"';
}
}
$buffer .= '></script>';
// This is for IE conditional statements support.
if (!is_null($conditional)) {
$buffer .= '<![endif]-->';
}
$buffer .= $lnEnd;
}
foreach ($this->updates['_script'] as $type =>
$content) {
$buffer .= $tab . '<script';
if (!is_null($type) &&
(!$this->document->isHtml5() || !in_array($type, $defaultJsMimes))) {
$buffer .= ' type="' . $type .
'"';
}
$buffer .= '>' . $lnEnd;
// This is for full XHTML support.
if ($this->document->_mime != 'text/html')
{
$buffer .= $tab . $tab . '//<![CDATA[' .
$lnEnd;
}
$buffer .= $content . $lnEnd;
// See above note
if ($this->document->_mime != 'text/html')
{
$buffer .= $tab . $tab . '//]]>' . $lnEnd;
}
$buffer .= $tab . '</script>' . $lnEnd;
}
return $buffer;
} else {
return null;
}
}
}PK9e�[OQ�X��
Platform/Joomla/JoomlaModule.phpnu�[���<?php
namespace Nextend\SmartSlider3\Platform\Joomla;
use Joomla\Registry\Registry;
class JoomlaModule {
/**
* JoomlaModule constructor.
*
* @param Registry $params
*/
public function __construct($params) {
$sliderId = intval($params->get('slider'));
if (defined('LITESPEED_ESI_SUPPORT')) {
nextend_smartslider3($sliderId);
} else {
echo 'smartslider3[' . $sliderId . ']';
}
}
}PK9e�[���Platform/Joomla/JoomlaShim.phpnu�[���<?php
namespace Nextend\SmartSlider3\Platform\Joomla;
use JEventDispatcher;
use Joomla\CMS\Factory;
use Joomla\Event\Event;
use JPluginHelper;
use Nextend\Framework\Pattern\SingletonTrait;
use Nextend\SmartSlider3\Settings;
use ReflectionFunction;
class JoomlaShim {
use SingletonTrait;
public static $isJoomla4 = 0;
protected function init() {
self::$isJoomla4 = version_compare(JVERSION, '4',
'>=') ? 1 : 0;
}
public static function getDispatcher() {
if (!self::$isJoomla4) {
return JEventDispatcher::getInstance();
}
return Factory::getApplication()
->getDispatcher();
}
private static function getExcludedContentPlugins() {
static $excludedPlugins;
if ($excludedPlugins === null) {
$excludedPlugins = explode('||',
Settings::get('joomla-plugins-content-excluded', ''));
$excludedPlugins[] = 'plgcontentemailcloak';
$excludedPlugins[] = 'plgcontentdropeditor';
$excludedPlugins[] = 'plgcontentshortcode_ultimate';
$excludedPlugins[] = 'plgcontentarkcontent';
$excludedPlugins[] = 'plgcontentosyoutube';
}
return $excludedPlugins;
}
public static function triggerOnContentPrepare($data) {
static $contentPluginsEnabled, $pluginsToRun;
JPluginHelper::importPlugin('content');
if (!self::$isJoomla4) {
if ($contentPluginsEnabled === null) {
$contentPluginsEnabled =
intval(Settings::get('joomla-plugins-content-enabled', 1));
if ($contentPluginsEnabled) {
$classNames = array();
foreach (JPluginHelper::getPlugin('content')
as $plugin) {
$classNames[] = strtolower('Plg' .
$plugin->type . $plugin->name);
}
$classNames = array_diff($classNames,
self::getExcludedContentPlugins());
$pluginsToRun = array();
$dispatcher = JEventDispatcher::getInstance();
$observers =
$dispatcher->get('_observers');
foreach ($observers as $observer) {
if (is_object($observer)) {
$className = strtolower(get_class($observer));
if (in_array($className, $classNames)) {
$pluginsToRun[] = $observer;
} else if (method_exists($observer,
'onContentPrepare') && !in_array($className,
self::getExcludedContentPlugins())) {
$pluginsToRun[] = $observer;
}
}
}
}
}
if ($contentPluginsEnabled && !empty($pluginsToRun)) {
foreach ($pluginsToRun as $observer) {
// Joomla removes it in every update
$data['event'] =
'oncontentprepare';
$observer->update($data);
}
}
return true;
}
if ($contentPluginsEnabled === null) {
$contentPluginsEnabled =
intval(Settings::get('joomla-plugins-content-enabled', 1));
if ($contentPluginsEnabled) {
$classNames = array();
foreach (JPluginHelper::getPlugin('content') as
$plugin) {
$classNames[] = strtolower('Plg' .
$plugin->type . $plugin->name);
}
$classNames = array_diff($classNames,
self::getExcludedContentPlugins());
$pluginsToRun = array();
$dispatcher = Factory::getApplication()
->getDispatcher();
$listeners =
$dispatcher->getListeners('onContentPrepare');
foreach ($listeners as $listener) {
$fn = new ReflectionFunction($listener);
$className =
strtolower(get_class($fn->getClosureThis()));
if (in_array($className, $classNames)) {
$pluginsToRun[] = $listener;
}
}
}
}
$event = new Event('onContentPrepare', $data);
foreach ($pluginsToRun as $callable) {
try {
$callable($event);
} catch (\Exception $e) {
}
}
return true;
}
public static function getOnContentPreparePluginsList() {
if (!self::$isJoomla4) {
JPluginHelper::importPlugin('content');
$dispatcher = JEventDispatcher::getInstance();
$classNames = array();
foreach ($dispatcher->get('_observers') as
$observer) {
if ((is_object($observer) || (is_string($observer)
&& class_exists($observer))) && method_exists($observer,
'onContentPrepare')) {
$className =
strtolower(get_class($observer));
$classNames[$className] = $className;
}
}
foreach (JPluginHelper::getPlugin('content') as
$plugin) {
$className = strtolower('Plg' .
$plugin->type . $plugin->name);
$classNames[$className] = ucfirst($plugin->name);
}
return $classNames;
}
JPluginHelper::importPlugin('content');
$dispatcher = Factory::getApplication()
->getDispatcher();
$classNames = array();
foreach ($dispatcher->getListeners('onContentPrepare')
as $listener) {
$fn = new ReflectionFunction($listener);
$className =
strtolower(get_class($fn->getClosureThis()));
$classNames[$className] = $className;
}
foreach (JPluginHelper::getPlugin('content') as $plugin)
{
$className = strtolower('Plg' .
$plugin->type . $plugin->name);
$classNames[$className] = ucfirst($plugin->name);
}
return $classNames;
}
public static function triggerEvent($eventName, $args = array()) {
if (!self::$isJoomla4) {
$dispatcher = JEventDispatcher::getInstance();
return $dispatcher->trigger('onInitN2Library',
$args);
}
return \JFactory::getApplication()
->triggerEvent($eventName, $args);
}
public static function loadComContentRoute() {
if (!self::$isJoomla4) {
require_once JPATH_ROOT .
'/components/com_content/helpers/route.php';
}
}
public static function mediaLibraryUrl() {
if (!self::$isJoomla4) {
return
'index.php?option=com_media&view=images&tmpl=component&asset=com_content&author=&fieldid=notused&folder=';
}
return
'index.php?option=com_media&tmpl=component&asset=86&author=584&fieldid={field-media-id}&path=local-0:/';
}
}
JoomlaShim::getInstance();PK9e�[ʉr��0Platform/Joomla/Module/Field/FieldEditSlider.phpnu�[���<?php
namespace Nextend\SmartSlider3\Platform\Joomla\Module\Field;
use JFormField;
use JUri;
jimport('joomla.form.formfield');
class FieldEditSlider extends JFormField {
protected $type = 'EditSlider';
public function getInput() {
$style = '<style>#jform_params_slider_chzn{width:100%
!important;max-width:500px;}</style>';
return $style . '<a href="#"
onclick="window.open(\'' . JUri::root() .
'administrator/index.php?option=com_smartslider3&nextendcontroller=slider&nextendaction=edit&sliderid=\'
+ jQuery(\'#jform_params_slider\').val(), \'_blank\');
return false;" class="btn btn-small btn-success"
target="_blank"> Edit selected slider</a>';
}
}PK9e�[�쟣�6Platform/Joomla/Plugin/PluginInstallerSmartSlider3.phpnu�[���<?php
namespace Nextend\SmartSlider3\Platform\Joomla\Plugin;
use JFactory;
use JPlugin;
use Nextend\SmartSlider3\Application\Model\ModelLicense;
use Nextend\SmartSlider3\SmartSlider3Info;
class PluginInstallerSmartSlider3 extends JPlugin {
public function onInstallerBeforePackageDownload(&$url,
&$headers) {
if (in_array(parse_url($url, PHP_URL_HOST), array(
'secure.nextendweb.com',
'api.nextendweb.com'
)) && strpos($url, 'smartslider3')) {
$license = ModelLicense::getInstance();
$isActive = $license->isActive() == 'OK';
if (!$isActive) {
JFactory::getApplication()
->enqueueMessage('Update error: Smart
Slider 3 Pro is not activated on your site!', 'error');
$url = SmartSlider3Info::api(array(
'action' => 'joomla_fail'
), true);
return false;
}
$url = SmartSlider3Info::api(array(
'action' => 'joomla_update',
'channel' => SmartSlider3Info::$channel
), true);
}
return true;
}
}PK9e�[op�c66-Platform/Joomla/Plugin/PluginSmartSlider3.phpnu�[���<?php
namespace Nextend\SmartSlider3\Platform\Joomla\Plugin;
use Artx;
use ArtxPage;
use EshopHelper;
use JFactory;
use Joomla\CMS\Application\SiteApplication;
use Joomla\CMS\Document\Document;
use JPlugin;
use Nextend\Framework\Asset\AssetManager;
use Nextend\SmartSlider3\Platform\Joomla\Joomla3Assets;
use Nextend\SmartSlider3\Platform\Joomla\JoomlaShim;
jimport('joomla.plugin.plugin');
/**
* Class PluginSmartSlider3
*
* Used in Joomla -> Plugin -> System -> Nextend2
*/
class PluginSmartSlider3 extends JPlugin {
/*
Artisteer jQuery fix
*/
public function onAfterDispatch() {
if (class_exists('Artx', true)) {
Artx::load("Artx_Page");
if (isset(ArtxPage::$inlineScripts)) {
ArtxPage::$inlineScripts[] = '<script>if(typeof
jQuery != "undefined") window.artxJQuery =
jQuery;</script>';
}
}
}
private function isRenderAllowed() {
static $isAllowed;
if ($isAllowed === null) {
/**
* @var SiteApplication $application
*/
$application = JFactory::getApplication();
if ($application->isClient('site')) {
$request = $application->input->request;
if (!JFactory::getUser()->guest &&
(($application->get('frontediting', 1) &&
$request->get('option') == 'com_content' &&
$request->get('view') == 'form' &&
$request->get('layout') == 'edit' &&
$application->input->getInt('a_id') > 0) ||
($request->get('option') == 'com_quix' &&
($request->get('layout') == 'edit') ||
$request->get('builder') == 'frontend')) ||
$request->get('type') == 'rss') {
$isAllowed = false;
} else {
$isAllowed = true;
}
} else {
$isAllowed = false;
}
}
return $isAllowed;
}
private function displaySliders($output) {
if (strpos($output, 'smartslider3[') !== false) {
if (class_exists('\\EshopHelper', false) &&
EshopHelper::getConfigValue('rich_snippets') == '1') {
$output =
preg_replace_callback('/(<.*?>)?smartslider3\[([0-9]+)\]/',
array(
self::class,
'cleanEshop'
), $output);
}
$output =
preg_replace_callback('/smartslider3\[([0-9]+)\]/', array(
self::class,
'prepare'
), $output);
}
return $output;
}
private function onNextendBeforeCompileHead() {
if ($this->isRenderAllowed()) {
/**
* @var SiteApplication $application
*/
$application = JFactory::getApplication();
$body = $application->getBody();
// Simple performance check to determine whether bot should
process further
if (strpos($body, 'smartslider3[') !== false) {
$bodyParts = explode('</head>', $body);
/**
* Last part is not the head
*/
$lastPart = count($bodyParts) - 1;
$bodyParts[$lastPart] =
$this->displaySliders($bodyParts[$lastPart]);
$application->setBody(implode('</head>',
$bodyParts));
}
}
}
public function onBeforeCompileHead() {
if ($this->isRenderAllowed()) {
if (JoomlaShim::$isJoomla4) {
foreach (Document::$_buffer as $bufferGroupKey =>
$bufferGroup) {
foreach ($bufferGroup as $bufferKey => $buffer) {
foreach ($buffer as $bKey => $bValue) {
Document::$_buffer[$bufferGroupKey][$bufferKey][$bKey] =
$this->displaySliders($bValue);
}
}
}
}
}
}
public function onAfterRender() {
if (!JoomlaShim::$isJoomla4) {
$joomla3Assets = new Joomla3Assets();
$this->onNextendBeforeCompileHead();
$joomla3Assets->process();
} else {
$this->onNextendBeforeCompileHead();
}
ob_start();
if
(class_exists('\\Nextend\\Framework\\Asset\\AssetManager',
false)) {
echo AssetManager::getCSS();
echo AssetManager::getJs();
}
$head = ob_get_clean();
if (!empty($head)) {
$application = JFactory::getApplication();
$body = $application->getBody();
$parts = preg_split('/<\/head>/', $body, 2);
if (!JoomlaShim::$isJoomla4) {
$head .= $joomla3Assets->renderHead();
}
$body = implode($head . '</head>', $parts);
$application->setBody($body);
}
}
public static function prepare($matches) {
ob_start();
nextend_smartslider3($matches[1]);
return ob_get_clean();
}
public static function cleanEshop($matches) {
if (strpos($matches[1], 'itemprop') !== false) {
return $matches[1];
}
return $matches[0];
}
}PK9e�[�
::.Platform/Joomla/SmartSlider3PlatformJoomla.phpnu�[���<?php
namespace Nextend\SmartSlider3\Platform\Joomla;
use JUri;
use Nextend\SmartSlider3\Platform\AbstractSmartSlider3Platform;
class SmartSlider3PlatformJoomla extends AbstractSmartSlider3Platform {
public function start() {
require_once(dirname(__FILE__) . '/compat.php');
}
public function getAdminUrl() {
return JUri::root() .
'administrator/index.php?option=com_smartslider3';
}
public function getAdminAjaxUrl() {
return JUri::root() .
'administrator/index.php?option=com_smartslider3&nextendajax=1';
}
}PK9e�[�����!Platform/SmartSlider3Platform.phpnu�[���<?php
namespace Nextend\SmartSlider3\Platform;
use Nextend\Framework\Pattern\SingletonTrait;
class SmartSlider3Platform {
use SingletonTrait;
/**
* @var AbstractSmartSlider3Platform
*/
private static $platform;
public function __construct() {
self::$platform = Joomla\SmartSlider3PlatformJoomla::getInstance();
self::$platform->start();
}
public static function getAdminUrl() {
return self::$platform->getAdminUrl();
}
public static function getAdminAjaxUrl() {
return self::$platform->getAdminAjaxUrl();
}
public static function getNetworkAdminUrl() {
return self::$platform->getNetworkAdminUrl();
}
}PK9e�[u���PublicApi/Project.phpnu�[���<?php
namespace Nextend\SmartSlider3\PublicApi;
use Nextend\SmartSlider3\Application\ApplicationSmartSlider3;
use Nextend\SmartSlider3\Application\Model\ModelSliders;
use Nextend\SmartSlider3\BackupSlider\ImportSlider;
/**
* Class Project
*
* This class contains the publicly available static methods to interact
with projects.
*
* @package Nextend\SmartSlider3
*/
class Project {
/**
* @param int $projectID
*
* @example \Nextend\SmartSlider3\PublicApi\Project::clearCache(6);
*
*/
public static function clearCache($projectID) {
$application = ApplicationSmartSlider3::getInstance();
$applicationType = $application->getApplicationTypeFrontend();
$sliderModal = new ModelSliders($applicationType);
$sliderModal->refreshCache($projectID);
}
/**
* @param string $pathToFile
*
* @return bool|int projectID on success. false on failure.
*
* @example
\Nextend\SmartSlider3\PublicApi\Project::import('/path/to/project.ss3');
*/
public static function import($pathToFile) {
$application = ApplicationSmartSlider3::getInstance();
$applicationType = $application->getApplicationTypeAdmin();
$import = new ImportSlider($applicationType);
$projectID = $import->import($pathToFile);
if ($projectID !== false) {
return $projectID;
}
return false;
}
}PK9e�[�c��!Renderable/AbstractRenderable.phpnu�[���<?php
namespace Nextend\SmartSlider3\Renderable;
use Nextend\Framework\Font\FontParser;
use Nextend\Framework\Font\FontRenderer;
use Nextend\Framework\Style\StyleParser;
use Nextend\Framework\Style\StyleRenderer;
use Nextend\SmartSlider3\Slider\FeatureManager;
abstract class AbstractRenderable {
public $isAdmin = false;
public $less = array();
public $css = array();
public $cssDevice = array(
'all' => array(),
'desktoplandscape' => array(),
'desktopportrait' => array(),
'tabletlandscape' => array(),
'tabletportrait' => array(),
'mobilelandscape' => array(),
'mobileportrait' => array(),
);
public $elementId = '';
public $fontSize = 16;
protected $images = array();
private $fontCache = array();
private $styleCache = array();
public $initCallbacks = array();
public $addedScriptResources = array();
/**
* @var FeatureManager
*/
public $features;
public function addLess($file, $context) {
$this->less[$file] = $context;
}
public function addCSS($css) {
$this->css[] = $css;
}
public function addDeviceCSS($device, $css) {
$this->cssDevice[$device][] = $css;
}
public function getSelector() {
return 'div#' . $this->elementId . ' ';
}
private function _addFontCache($font, $mode, $pre, $fontSize) {
$cacheKey = md5($font . $mode . $pre . $fontSize);
if (!isset($this->fontCache[$cacheKey])) {
$fontData = FontRenderer::render($font, $mode, $pre,
$fontSize);
if ($fontData) {
$this->addCSS($fontData[1]);
$this->fontCache[$cacheKey] = $fontData[0];
} else {
$this->fontCache[$cacheKey] = '';
}
}
return $this->fontCache[$cacheKey];
}
public function addFont($font, $mode, $pre = null) {
$font = FontParser::parse($font);
if ($this->isAdmin) {
$fontData = FontRenderer::render($font, $mode, $pre == null ?
$this->getSelector() : $pre, $this->fontSize);
if ($fontData) {
$this->addCSS($fontData[1]);
return $fontData[0];
}
return '';
}
return $this->_addFontCache($font, $mode, $pre == null ?
$this->getSelector() : $pre, $this->fontSize);
}
private function _addStyleCache($style, $mode, $pre) {
$cacheKey = md5($style . $mode . $pre);
if (!isset($this->styleCache[$cacheKey])) {
$styleData = StyleRenderer::render($style, $mode, $pre);
if ($styleData) {
$this->addCSS($styleData[1]);
$this->styleCache[$cacheKey] = $styleData[0];
} else {
$this->styleCache[$cacheKey] = '';
}
}
return $this->styleCache[$cacheKey];
}
public function addStyle($style, $mode, $pre = null) {
$style = StyleParser::parse($style);
if ($this->isAdmin) {
$styleData = StyleRenderer::render($style, $mode, $pre == null
? $this->getSelector() : $pre);
if ($styleData) {
$this->addCSS($styleData[1]);
return $styleData[0];
}
return '';
}
return $this->_addStyleCache($style, $mode, $pre == null ?
$this->getSelector() : $pre);
}
public function addScript($script, $name = false) {
if ($name !== false) {
$this->addedScriptResources[] = $name;
}
$this->initCallbacks[] = $script;
}
public function isScriptAdded($name) {
return in_array($name, $this->addedScriptResources);
}
public function addImage($imageUrl) {
$this->images[] = $imageUrl;
}
public function getImages() {
return $this->images;
}
public abstract function render();
}PK9e�[l��R��&Renderable/AbstractRenderableOwner.phpnu�[���<?php
namespace Nextend\SmartSlider3\Renderable;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Renderable\Component\ComponentCol;
use Nextend\SmartSlider3\Renderable\Component\ComponentContent;
use Nextend\SmartSlider3\Renderable\Component\ComponentLayer;
use Nextend\SmartSlider3\Renderable\Component\ComponentRow;
use Nextend\SmartSlider3\Renderable\Item\AbstractItemFrontend;
abstract class AbstractRenderableOwner {
public $underEdit = false;
/**
* @var AbstractRenderable
*/
protected $renderable;
/** @var string Used for generators when multiple slides might contain
the same unique class */
public $unique = '';
/**
* @return AbstractRenderable
*/
public function getRenderable() {
return $this->renderable;
}
public abstract function getElementID();
public function isComponentVisible($generatorVisibleVariable) {
return true;
}
public function fill($value) {
return $value;
}
public function fillLayers(&$layers) {
for ($i = 0; $i < count($layers); $i++) {
if (isset($layers[$i]['type'])) {
switch ($layers[$i]['type']) {
case 'slide':
$this->fillLayers($layers[$i]['layers']);
break;
case 'content':
ComponentContent::getFilled($this, $layers[$i]);
break;
case 'row':
ComponentRow::getFilled($this, $layers[$i]);
break;
case 'col':
ComponentCol::getFilled($this, $layers[$i]);
break;
case 'group':
$this->fillLayers($layers[$i]['layers']);
break;
default:
ComponentLayer::getFilled($this, $layers[$i]);
}
} else {
ComponentLayer::getFilled($this, $layers[$i]);
}
}
}
public function isLazyLoadingEnabled() {
return false;
}
/**
* @param AbstractItemFrontend $item
* @param $src
* @param array $attributes
*
* @return string
*/
public function renderImage($item, $src, $attributes = array(),
$pictureAttributes = array()) {
return Html::image($src, $attributes);
}
public abstract function addScript($script, $name = false);
public abstract function isScriptAdded($name);
public abstract function addLess($file, $context);
public abstract function addCSS($css);
public abstract function addDeviceCSS($device, $css);
public abstract function addFont($font, $mode, $pre = null);
public abstract function addStyle($style, $mode, $pre = null);
public abstract function addImage($imageUrl);
public abstract function isAdmin();
public abstract function getAvailableDevices();
}PK9e�[bi�{�{*Renderable/Component/AbstractComponent.phpnu�[���<?php
namespace Nextend\SmartSlider3\Renderable\Component;
use Nextend\Framework\Data\Data;
use Nextend\Framework\Parser\Color;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\BackupSlider\ExportSlider;
use Nextend\SmartSlider3\BackupSlider\ImportSlider;
use Nextend\SmartSlider3\Renderable\AbstractRenderableOwner;
use Nextend\SmartSlider3\Renderable\ComponentContainer;
use Nextend\SmartSlider3\Renderable\Placement\AbstractPlacement;
use Nextend\SmartSlider3\Renderable\Placement\PlacementAbsolute;
use Nextend\SmartSlider3\Renderable\Placement\PlacementDefault;
use Nextend\SmartSlider3\Renderable\Placement\PlacementNormal;
use Nextend\SmartSlider3\Slider\Slide;
abstract class AbstractComponent {
public static $isAdmin = false;
/**
* @var Slide
*/
protected $owner;
/**
* @var Style
*/
public $style;
protected $type = '';
protected $name = '';
/**
* @var AbstractComponent|bool
*/
protected $group;
/**
* @var AbstractPlacement
*/
protected $placement;
/**
* @var ComponentContainer
*/
protected $container = false;
protected $fontSizeModifier = 100;
protected $attributes = array(
'class' => 'n2-ss-layer n2-ow',
'style' => ''
);
public $data;
protected $localStyle = array();
protected $localRawStyles = array();
protected $hasBackground = false;
/**
* AbstractBuilderComponent constructor.
*
* @param int $index
* @param AbstractRenderableOwner $owner
* @param AbstractComponent|bool $group
* @param $data
*/
public function __construct($index, $owner, $group, $data) {
$this->owner = $owner;
$this->group = $group;
$this->style = new Style($this);
$this->data = new Data($data);
$this->fontSizeModifier =
$this->data->get('desktopportraitfontsize', 100);
if (!is_numeric($this->fontSizeModifier)) {
$this->fontSizeModifier = 100;
}
switch ($this->getPlacement()) {
case 'normal':
$this->placement = new PlacementNormal($this, $index);
break;
case 'default':
$this->placement = new PlacementDefault($this, $index);
break;
case 'absolute':
default:
$this->placement = new PlacementAbsolute($this, $index);
break;
}
}
public function getPlacement() {
if ($this->data->has('pm')) {
return $this->data->get('pm');
}
if ($this->group->getType() == 'slide') {
return 'absolute';
}
return 'normal';
}
/**
* @return AbstractRenderableOwner
*/
public function getOwner() {
return $this->owner;
}
public function isRenderAllowed() {
$generatorVisible =
$this->data->get('generatorvisible', '');
if ($this->owner->isComponentVisible($generatorVisible)
&& !self::$isAdmin) {
$filled = $this->owner->fill($generatorVisible);
if (empty($filled)) {
return false;
}
}
return true;
}
public abstract function render($isAdmin);
protected function renderContainer($isAdmin) {
if ($this->container) {
return $this->container->render($isAdmin);
}
return '';
}
protected function admin() {
$this->createProperty('id', '');
$this->createProperty('uniqueclass', '');
$this->createProperty('zindex', 2);
$this->createProperty('class', '');
$this->createProperty('name', $this->name);
$this->createProperty('namesynced', 1);
$this->createProperty('status');
$this->createProperty('generatorvisible',
'');
$this->placement->adminAttributes($this->attributes);
}
public function spacingToPxValue($value) {
$values = explode('|*|', $value);
unset($values[4]);
return array_map('intval', $values) + array(
0,
0,
0,
0
);
}
protected function prepareHTML() {
$this->attributes['data-sstype'] = $this->type;
$id = $this->data->get('id', '');
if (!empty($id)) {
$this->attributes['id'] = $id;
}
$class = $this->data->get('class', '');
if (!empty($class)) {
$this->attributes['class'] .= ' ' .
$this->getOwner()
->fill($class);
}
$uniqueClass = $this->data->get('uniqueclass',
'');
if (!empty($uniqueClass)) {
$this->addUniqueClass($uniqueClass .
$this->owner->unique);
}
$zIndex = intval($this->data->get('zindex', 2));
if ($zIndex != 2) {
$this->attributes['style'] .= 'z-index:'
. $zIndex . ';';
}
}
protected function addUniqueClass($class) {
$this->attributes['class'] .= ' ' . $class;
}
protected function runPlugins() {
$this->pluginRotation();
$this->pluginAnimations();
$this->pluginShowOn();
$this->pluginFontSize();
$this->pluginParallax();
}
protected function renderPlugins($html) {
return $this->pluginCrop($html);
}
private function pluginRotation() {
$rotation = $this->data->get('rotation', 0);
if ($rotation) {
$this->createProperty('rotation', 0);
$this->attributes['style'] .=
'transform:rotate(' . $rotation . 'deg);';
}
}
private function pluginCrop($html) {
$cropStyle = $this->data->get('crop',
'visible');
if (self::$isAdmin) {
if ($cropStyle == 'auto') {
$cropStyle = 'hidden';
}
} else {
if ($cropStyle == 'auto') {
$this->attributes['class'] .= '
n2_container_scrollable';
}
}
if ($cropStyle == 'mask') {
$cropStyle = 'hidden';
$html = Html::tag('div', array('class'
=> 'n2-ss-layer-mask n2-ss-layer-wrapper'), $html);
$this->attributes['data-animatableselector'] =
'.n2-ss-layer-mask';
}
if (!empty($cropStyle) && $cropStyle !=
'visible') {
$this->attributes['style'] .=
'overflow:' . $cropStyle . ';';
}
if (self::$isAdmin) {
$crop = $this->data->get('crop',
'visible');
if (empty($crop)) {
$crop = 'visible';
}
$this->attributes['data-crop'] = $crop;
}
return $html;
}
/**
* Transform V1 animations to V2
*
* @param $data
*
* @return array
*/
private function pluginAnimationsConvertV1ToV2($data) {
if (empty($data)) {
return array();
}
if (isset($data['in'])) {
if (!isset($data['basic'])) {
$data['basic'] = array(
'in' => array()
);
} else if (!isset($data['basic']['in'])) {
$data['basic']['in'] = array();
}
$this->pluginAnimationsConvertV1ToV2RemoveName($data['in']);
if (isset($data['in'][0]['delay'])
&& isset($data['repeatable']) &&
$data['repeatable'] == 1) {
if ($data['in'][0]['delay'] > 0) {
$data['startDelay'] =
$data['in'][0]['delay'];
}
unset($data['in'][0]['delay']);
}
$data['basic']['in']['keyFrames']
= $data['in'];
unset($data['in']);
}
if (isset($data['specialZeroIn'])) {
if (isset($data['basic']['in'])) {
$data['basic']['in']['specialZero'] =
$data['specialZeroIn'];
}
unset($data['specialZeroIn']);
}
if (isset($data['transformOriginIn'])) {
if (isset($data['basic']['in'])) {
$data['basic']['in']['transformOrigin'] =
$data['transformOriginIn'];
}
unset($data['transformOriginIn']);
}
if (isset($data['loop'])) {
if (!isset($data['basic'])) {
$data['basic'] = array(
'loop' => array()
);
} else if (!isset($data['basic']['loop']))
{
$data['basic']['loop'] = array();
}
$this->pluginAnimationsConvertV1ToV2RemoveName($data['loop']);
$data['basic']['loop']['keyFrames'] =
$data['loop'];
unset($data['loop']);
}
if (isset($data['repeatCount'])) {
if (isset($data['basic']['loop'])) {
$data['basic']['loop']['repeatCount'] =
$data['repeatCount'];
}
unset($data['repeatCount']);
}
if (isset($data['repeatStartDelay'])) {
if (isset($data['basic']['loop'])) {
$data['basic']['loop']['repeatStartDelay'] =
$data['repeatStartDelay'];
}
unset($data['repeatStartDelay']);
}
if (isset($data['transformOriginLoop'])) {
if (isset($data['basic']['loop'])) {
$data['basic']['loop']['transformOrigin'] =
$data['transformOriginLoop'];
}
unset($data['transformOriginLoop']);
}
if (isset($data['out'])) {
if (!isset($data['basic'])) {
$data['basic'] = array(
'out' => array()
);
} else if (!isset($data['basic']['out'])) {
$data['basic']['out'] = array();
}
$this->pluginAnimationsConvertV1ToV2RemoveName($data['out']);
$data['basic']['out']['keyFrames'] =
$data['out'];
unset($data['out']);
}
if (isset($data['transformOriginOut'])) {
if (isset($data['basic']['out'])) {
$data['basic']['out']['transformOrigin'] =
$data['transformOriginOut'];
}
unset($data['transformOriginOut']);
}
if (!isset($data['instantOut']) ||
$data['instantOut'] == '1') {
if (empty($data['outPlayEvent']) &&
$this->owner->getSlider()->params->get('layer-animation-play-mode')
=== 'forced') {
$data['outPlayEvent'] = 'InstantOut';
}
}
if (isset($data['instantOut'])) {
unset($data['instantOut']);
}
return $data;
}
private function
pluginAnimationsConvertV1ToV2RemoveName(&$keyFrames) {
for ($i = 0; $i < count($keyFrames); $i++) {
if (isset($keyFrames[$i]['name'])) {
unset($keyFrames[$i]['name']);
}
}
}
private function pluginAnimations() {
$animations = $this->data->get('animv2', -1);
if ($animations === -1) {
$animationsV1 = $this->data->get('animations',
-1);
if ($animationsV1 !== -1) {
$animations =
$this->pluginAnimationsConvertV1ToV2($animationsV1);
}
}
if ($animations === -1) {
$animations = '';
}
if (!empty($animations)) {
if (isset($animations['basic'])) {
/**
* Empty keyFrame gets encoded as array instead of object
and arrays might have extra property
* which can mess up animations.
*/
if (isset($animations['basic']['in']))
{
if
(empty($animations['basic']['in'])) {
unset($animations['basic']['in']);
} else {
self::fixAnimationArray($animations['basic']['in'],
'keyFrames');
}
}
if
(isset($animations['basic']['loop'])) {
if
(empty($animations['basic']['loop'])) {
unset($animations['basic']['loop']);
} else {
self::fixAnimationArray($animations['basic']['loop'],
'keyFrames');
}
}
if (isset($animations['basic']['out']))
{
if
(empty($animations['basic']['out'])) {
unset($animations['basic']['out']);
} else {
self::fixAnimationArray($animations['basic']['out'],
'keyFrames');
}
}
}
if (isset($animations['reveal'])) {
if (isset($animations['reveal']['in']))
{
$animations['reveal']['in'] =
(object)$animations['reveal']['in'];
}
if
(isset($animations['reveal']['out'])) {
$animations['reveal']['out'] =
(object)$animations['reveal']['out'];
}
}
$this->attributes['data-animv2'] =
json_encode($animations);
}
$this->pluginAnimationGetEventAttributes();
}
private static function fixAnimationArray(&$array, $key) {
if (isset($array[$key]) && is_array($array[$key])) {
for ($i = 0; $i < count($array[$key]); $i++) {
$array[$key][$i] = (object)$array[$key][$i];
}
}
}
private function pluginAnimationGetEventAttributes() {
if (!self::$isAdmin) {
$elementID = $this->owner->getElementID();
$click = $this->data->get('click');
if (!empty($click)) {
$this->attributes['data-click'] =
$this->pluginAnimationParseEventCode($click, $elementID);
}
$mouseenter = $this->data->get('mouseenter');
if (!empty($mouseenter)) {
$this->attributes['data-mouseenter'] =
$this->pluginAnimationParseEventCode($mouseenter, $elementID);
}
$mouseleave = $this->data->get('mouseleave');
if (!empty($mouseleave)) {
$this->attributes['data-mouseleave'] =
$this->pluginAnimationParseEventCode($mouseleave, $elementID);
}
$play = $this->data->get('play');
if (!empty($play)) {
$this->attributes['data-play'] =
$this->pluginAnimationParseEventCode($play, $elementID);
}
$pause = $this->data->get('pause');
if (!empty($pause)) {
$this->attributes['data-pause'] =
$this->pluginAnimationParseEventCode($pause, $elementID);
}
$stop = $this->data->get('stop');
if (!empty($stop)) {
$this->attributes['data-stop'] =
$this->pluginAnimationParseEventCode($stop, $elementID);
}
} else {
$click = $this->data->get('click');
if (!empty($click)) {
$this->attributes['data-click'] = $click;
}
$mouseenter = $this->data->get('mouseenter');
if (!empty($mouseenter)) {
$this->attributes['data-mouseenter'] =
$mouseenter;
}
$mouseleave = $this->data->get('mouseleave');
if (!empty($mouseleave)) {
$this->attributes['data-mouseleave'] =
$mouseleave;
}
$play = $this->data->get('play');
if (!empty($play)) {
$this->attributes['data-play'] = $play;
}
$pause = $this->data->get('pause');
if (!empty($pause)) {
$this->attributes['data-pause'] = $pause;
}
$stop = $this->data->get('stop');
if (!empty($stop)) {
$this->attributes['data-stop'] = $stop;
}
}
}
private function pluginAnimationParseEventCode($code, $elementId) {
if (preg_match('/^[a-zA-Z0-9_\-,]+$/', $code)) {
if (is_numeric($code)) {
$code = "window['" . $elementId .
"'].changeTo(" . ($code - 1) . ");";
} else if ($code == 'next') {
$code = "window['" . $elementId .
"'].next();";
} else if ($code == 'previous') {
$code = "window['" . $elementId .
"'].previous();";
} else {
$code = "n2ss.trigger(e.currentTarget, '" .
$code . "');";
}
}
return $code;
}
private function pluginShowOn() {
if (self::$isAdmin) {
$this->createDeviceProperty('', 1);
}
$devices = $this->owner->getAvailableDevices();
foreach ($devices as $device) {
if (!$this->isShown($device)) {
$this->attributes['data-hide' . $device] = 1;
$this->style->addOnly($device, '',
'display:none');
}
}
}
public function isShown($device) {
return intval($this->data->get($device, 1)) === 1;
}
protected function pluginFontSize() {
if (self::$isAdmin) {
$this->createDeviceProperty('fontsize', 100);
}
$devices = $this->owner->getAvailableDevices();
foreach ($devices as $device) {
$fontSize = $this->data->get($device .
'fontsize');
if ($fontSize !== '' && $fontSize != 100) {
$this->style->add($device, '',
'--ssfont-scale:' . $fontSize / 100 . '');
}
}
}
public function pluginParallax() {
$parallax = intval($this->data->get('parallax',
0));
if (self::$isAdmin) {
$this->attributes['data-parallax'] = $parallax;
} else if ($parallax >= 1) {
/**
* FlatSome theme use data-parallax and we are conflicting with
it.
*
* @see SSDEV-2769
*/
$this->attributes['data-ssparallax'] = $parallax;
}
}
public function createProperty($name, $default = null) {
$this->attributes['data-' . $name] =
$this->data->get($name, $default);
}
public function createColorProperty($name, $allowVariable, $default =
null) {
$value = $this->data->get($name, $default);
if (!$allowVariable || ($value !== NULL && $value[0] !=
'{')) {
$l = strlen($value);
if (($l != 6 && $l != 8) ||
!preg_match('/^[0-9A-Fa-f]+$/', $value)) {
$value = $default;
}
}
$this->attributes['data-' . $name] = $value;
}
public function createDeviceProperty($name, $default = null) {
$device = 'desktopportrait';
$this->attributes['data-' . $device . $name] =
$this->data->get($device . $name, $default);
$devices = array(
'desktoplandscape',
'tabletportrait',
'tabletlandscape',
'mobileportrait',
'mobilelandscape'
);
foreach ($devices as $device) {
$this->attributes['data-' . $device . $name] =
$this->data->get($device . $name, null);
}
}
protected function renderBackground() {
$backgroundStyle = '';
$image =
$this->owner->fill($this->data->get('bgimage',
''));
if ($image != '') {
$x = intval($this->data->get('bgimagex', 50));
$y = intval($this->data->get('bgimagey', 50));
$backgroundStyle .= '--n2bgimage:URL("' .
ResourceTranslator::toUrl($image) . '");';
$backgroundStyle .= 'background-position:50%
50%,' . $x . '% ' . $y . '%;';
$this->hasBackground = true;
$optimizedData = $this->owner->optimizeImageWebP($image);
if (isset($optimizedData['normal'])) {
$this->owner->addImage($optimizedData['normal']['src']);
$this->localRawStyles[] = '.n2webp
@rule-inner{--n2bgimage: URL(' .
$optimizedData['normal']['src'] . ')}';
}
if (isset($optimizedData['medium'])) {
$this->owner->addImage($optimizedData['medium']['src']);
$this->localRawStyles[] = '@media (max-width:
' . $optimizedData['medium']['width'] . 'px)
{.n2webp @rule-inner{--n2bgimage: URL(' .
$optimizedData['medium']['src'] . ')}}';
}
if (isset($optimizedData['small'])) {
$this->owner->addImage($optimizedData['small']['src']);
$this->localRawStyles[] = '@media (max-width:
' . $optimizedData['small']['width'] . 'px)
{.n2webp @rule-inner{--n2bgimage: URL(' .
$optimizedData['small']['src'] . ')}}';
}
}
$color =
$this->owner->fill($this->data->get('bgcolor',
'00000000'));
if (empty($color)) {
$color = '00000000';
}
$gradient = $this->data->get('bgcolorgradient',
'off');
$colorEnd =
$this->owner->fill($this->data->get('bgcolorgradientend',
'00000000'));
if (empty($colorEnd)) {
$colorEnd = '00000000';
}
$this->addLocalStyle('normal', 'background',
$this->getBackgroundCSS($color, $gradient, $colorEnd, $backgroundStyle)
. $backgroundStyle);
$colorHover =
$this->data->get('bgcolor-hover');
$gradientHover =
$this->data->get('bgcolorgradient-hover');
$colorEndHover =
$this->data->get('bgcolorgradientend-hover');
$isHoverDifferent = false;
if (!empty($colorHover) && $colorHover != $color) {
$isHoverDifferent = true;
}
if (!empty($gradientHover) && $gradientHover != $gradient)
{
$isHoverDifferent = true;
}
if (!empty($colorEndHover) && $colorEndHover != $colorEnd)
{
$isHoverDifferent = true;
}
if ($isHoverDifferent) {
if (empty($colorHover)) $colorHover = $color;
if (empty($gradientHover)) $gradientHover = $gradient;
if (empty($colorEndHover)) $colorEndHover = $colorEnd;
$this->addLocalStyle('hover',
'background', $this->getBackgroundCSS($colorHover,
$gradientHover, $colorEndHover, $backgroundStyle));
}
}
protected function getBackgroundCSS($color, $gradient, $colorend,
$backgroundStyle) {
if (Color::hex2alpha($color) != 0 || ($gradient != 'off'
&& Color::hex2alpha($colorend) != 0)) {
$this->hasBackground = true;
switch ($gradient) {
case 'horizontal':
return '--n2bggradient:linear-gradient(to right,
' . Color::colorToRGBA($color) . ' 0%,' .
Color::colorToRGBA($colorend) . ' 100%);';
case 'vertical':
return '--n2bggradient:linear-gradient(to bottom,
' . Color::colorToRGBA($color) . ' 0%,' .
Color::colorToRGBA($colorend) . ' 100%);';
case 'diagonal1':
return '--n2bggradient:linear-gradient(45deg,
' . Color::colorToRGBA($color) . ' 0%,' .
Color::colorToRGBA($colorend) . ' 100%);';
case 'diagonal2':
return '--n2bggradient:linear-gradient(135deg,
' . Color::colorToRGBA($color) . ' 0%,' .
Color::colorToRGBA($colorend) . ' 100%);';
case 'off':
default:
if (!empty($backgroundStyle)) {
return "--n2bggradient:linear-gradient("
. Color::colorToRGBA($color) . ", " . Color::colorToRGBA($color)
. ");";
} else {
return "background-color:" .
Color::colorToRGBA($color) . ';';
}
break;
}
}
return '';
}
/**
* @param AbstractRenderableOwner $slide
* @param array $layer
*/
public static function getFilled($slide, &$layer) {
if (!empty($layer['uniqueclass'])) {
$layer['uniqueclass'] .= $slide->unique;
}
if (!empty($layer['class'])) {
$layer['class'] =
$slide->fill($layer['class']);
}
}
/**
* @param ExportSlider $export
* @param array $layer
*/
public static function prepareExport($export, $layer) {
}
/**
* @param ImportSlider $import
* @param array $layer
*/
public static function prepareImport($import, &$layer) {
}
/**
* @param array $layer
*/
public static function prepareSample(&$layer) {
}
public function getAttribute($key) {
if (isset($this->attributes[$key])) {
return $this->attributes[$key];
}
return null;
}
public function setAttribute($key, $value) {
$this->attributes[$key] = $value;
}
protected function addLocalStyle($group, $name, $style) {
if (!empty($style)) {
for ($i = 0; $i < count($this->localStyle); $i++) {
if ($this->localStyle[$i]['group'] == $group)
{
$this->localStyle[$i]['css'][$name] =
$style;
break;
}
}
}
}
protected function serveLocalStyle() {
$uniqueClassSelector = $this->getUniqueClassSelector();
$css = '';
for ($i = 0; $i < count($this->localStyle); $i++) {
$style = '';
foreach ($this->localStyle[$i]['css'] as $_css) {
$style .= $_css;
}
if (!empty($style)) {
$css .= '@rule' .
$this->localStyle[$i]['selector'] . '{' . $style .
'}';
}
}
if (!empty($css)) {
$this->getOwner()
->addCSS(str_replace('@rule',
$uniqueClassSelector, $css));
}
if (!empty($this->localRawStyles)) {
foreach ($this->localRawStyles as $localRawStyle) {
$this->getOwner()
->addCSS(str_replace('@rule',
$uniqueClassSelector, $localRawStyle));
}
}
foreach ($this->style->styles as $device => $styles) {
foreach ($styles as $selector => $stylesData) {
$this->getOwner()
->addDeviceCSS($device, $uniqueClassSelector .
$selector . '{' . implode(';', $stylesData) .
'}');
}
}
}
public function getUniqueClassSelector() {
$uniqueClass = $this->data->get('uniqueclass',
'');
if (empty($uniqueClass)) {
$uniqueClass =
self::generateUniqueIdentifier('n-uc-');
$this->data->set('uniqueclass', $uniqueClass);
}
$uniqueClass .= $this->owner->unique;
return 'div#' . $this->owner->getElementID() .
' .' . $uniqueClass;
}
protected static function generateUniqueIdentifier($prefix =
'n', $length = 12) {
$characters =
'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[mt_rand(0, $charactersLength -
1)];
}
return $prefix . $randomString;
}
public static function translateUniqueIdentifier($layers, $isAction =
true) {
$idTranslation = array();
self::translateUniqueIdentifierID($idTranslation, $layers);
self::translateUniqueIdentifierParentID($idTranslation, $layers);
if ($isAction) {
self::translateUniqueIdentifierClass($layers);
}
return $layers;
}
private static function
translateUniqueIdentifierID(&$idTranslation, &$layers) {
if (is_array($layers)) {
for ($i = 0; $i < count($layers); $i++) {
if (!empty($layers[$i]['id'])) {
$newId =
self::generateUniqueIdentifier();
$idTranslation[$layers[$i]['id']] = $newId;
$layers[$i]['id'] = $newId;
}
if (isset($layers[$i]['type'])) {
switch ($layers[$i]['type']) {
case 'row':
self::translateUniqueIdentifierID($idTranslation,
$layers[$i]['cols']);
break;
case 'col':
case 'content':
self::translateUniqueIdentifierID($idTranslation,
$layers[$i]['layers']);
break;
}
}
}
}
}
private static function
translateUniqueIdentifierParentID(&$idTranslation, &$layers) {
if (is_array($layers)) {
for ($i = 0; $i < count($layers); $i++) {
if (!empty($layers[$i]['parentid'])) {
if
(isset($idTranslation[$layers[$i]['parentid']])) {
$layers[$i]['parentid'] =
$idTranslation[$layers[$i]['parentid']];
} else {
$layers[$i]['parentid'] = '';
}
}
if (isset($layers[$i]['type'])) {
switch ($layers[$i]['type']) {
case 'row':
self::translateUniqueIdentifierParentID($idTranslation,
$layers[$i]['cols']);
break;
case 'col':
case 'content':
self::translateUniqueIdentifierParentID($idTranslation,
$layers[$i]['layers']);
break;
}
}
}
}
}
private static function translateUniqueIdentifierClass(&$layers) {
if (is_array($layers)) {
for ($i = 0; $i < count($layers); $i++) {
if (!empty($layers[$i]['uniqueclass'])) {
$layers[$i]['uniqueclass'] =
self::generateUniqueIdentifier('n-uc-');
}
if (isset($layers[$i]['type'])) {
switch ($layers[$i]['type']) {
case 'row':
self::translateUniqueIdentifierClass($layers[$i]['cols']);
break;
case 'col':
case 'content':
self::translateUniqueIdentifierClass($layers[$i]['layers']);
break;
}
}
}
}
}
/**
* @return string
*/
public function getType() {
return $this->type;
}
public static function innerAlignToStyle($innerAlign) {
if ($innerAlign == 'left') {
return 'text-align:left;--ssselfalign:var(--ss-fs);';
} else if ($innerAlign == 'center') {
return 'text-align:center;--ssselfalign:center;';
} else if ($innerAlign == 'right') {
return
'text-align:right;--ssselfalign:var(--ss-fe);';
} else if ($innerAlign == '') {
return '';
}
return 'text-align:inherit;--ssselfalign:inherit;';
}
public static function selfAlignToStyle($innerAlign) {
if ($innerAlign == 'left') {
return 'align-self:var(--ss-fs);';
} else if ($innerAlign == 'center') {
return 'align-self:center;';
} else if ($innerAlign == 'right') {
return 'align-self:var(--ss-fe);';
} else if ($innerAlign == '') {
return '';
}
return 'align-self:var(--ssselfalign);';
}
}PK9e�[o�D�6868%Renderable/Component/ComponentCol.phpnu�[���<?php
namespace Nextend\SmartSlider3\Renderable\Component;
use Nextend\Framework\Parser\Color;
use Nextend\Framework\Parser\Common;
use Nextend\Framework\Parser\Link;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Application\Model\ModelSlides;
use Nextend\SmartSlider3\BackupSlider\ExportSlider;
use Nextend\SmartSlider3\Renderable\AbstractRenderableOwner;
use Nextend\SmartSlider3\Renderable\ComponentContainer;
class ComponentCol extends AbstractComponent {
protected $type = 'col';
protected $colAttributes = array(
'class' => 'n2-ss-layer-col
n2-ss-layer-with-background n2-ss-layer-content',
'style' => ''
);
protected $localStyle = array(
array(
"group" => "normal",
"selector" => '-inner',
"css" => array()
),
array(
"group" => "hover",
"selector" => '-inner:HOVER',
"css" => array()
),
);
protected $width;
public function __construct($index, $owner, $group, $data) {
parent::__construct($index, $owner, $group, $data);
$this->container = new ComponentContainer($owner, $this,
$data['layers']);
$this->data->un_set('layers');
$this->upgradeData();
$this->attributes['style'] = '';
$devices = $this->owner->getAvailableDevices();
$desktopportraitInnerAlign =
$this->data->get('desktopportraitinneralign',
'inherit');
$desktopPortraitMaxWidth =
intval($this->data->get('desktopportraitmaxwidth'));
foreach ($devices as $device) {
if ($this->data->has($device . 'padding')) {
$padding = $this->data->get($device .
'padding');
if (!empty($padding)) {
$paddingValues = $this->spacingToPxValue($padding);
$this->style->add($device, '-inner',
'padding:' . implode('px ', $paddingValues) .
'px');
}
}
if ($this->data->has($device . 'maxwidth')) {
$maxWidth = intval($this->data->get($device .
'maxwidth'));
if ($maxWidth > 0) {
$this->style->add($device, '',
'max-width: ' . $maxWidth . 'px');
} else if ($device != 'desktopportrait'
&& $maxWidth != $desktopPortraitMaxWidth) {
$this->style->add($device, '',
'max-width: none');
}
}
$innerAlign = $this->data->get($device .
'inneralign', '');
if ($device == 'desktopportrait') {
if ($desktopportraitInnerAlign != 'inherit') {
$this->style->add($device, '-inner',
AbstractComponent::innerAlignToStyle($innerAlign));
}
} else if ($desktopportraitInnerAlign != $innerAlign) {
$this->style->add($device, '-inner',
AbstractComponent::innerAlignToStyle($innerAlign));
}
$verticalAlign = $this->data->get($device .
'verticalalign');
if (!empty($verticalAlign)) {
$this->style->add($device, '-inner',
'justify-content:' . $verticalAlign);
}
if ($this->data->has($device . 'order')) {
$order = intval($this->data->get($device .
'order'));
if ($order > 0) {
$this->style->add($device, '',
'order: ' . $order);
}
}
}
$this->renderBackground();
$borderRadius =
intval($this->data->get('borderradius', '0'));
$this->addLocalStyle('normal',
'borderradius', $this->getBorderRadiusCSS($borderRadius));
$borderRadiusHover =
intval($this->data->get('borderradius-hover'));
if (!empty($borderRadiusHover) && $borderRadiusHover !=
$borderRadius) {
$this->addLocalStyle('hover',
'borderradius',
$this->getBorderRadiusCSS($borderRadiusHover));
}
$boxShadow = $this->data->get('boxshadow',
'0|*|0|*|0|*|0|*|00000080');
$this->addLocalStyle('normal', 'boxshadow',
$this->getBoxShadowCSS($boxShadow));
$boxShadowHover =
$this->data->get('boxshadow-hover');
if (!empty($boxShadowHover) && $boxShadowHover !=
$boxShadow) {
$this->addLocalStyle('hover',
'boxshadow', $this->getBoxShadowCSS($boxShadowHover));
}
$borderWidth = $this->data->get('borderwidth',
'1|*|1|*|1|*|1');
$borderStyle = $this->data->get('borderstyle',
'none');
$borderColor = $this->data->get('bordercolor',
'ffffffff');
if ($borderStyle != 'none') {
$this->addLocalStyle('normal', 'border',
$this->getBorderCSS($borderWidth, $borderStyle, $borderColor));
}
$borderWidthHover =
$this->data->get('borderwidth-hover');
$borderStyleHover =
$this->data->get('borderstyle-hover');
$borderColorHover =
$this->data->get('bordercolor-hover');
$isHoverDifferent = false;
if (!empty($borderWidthHover) || $borderWidthHover != $borderWidth)
{
$isHoverDifferent = true;
}
if (!empty($borderStyleHover) || $borderStyleHover != $borderStyle)
{
$isHoverDifferent = true;
}
if (!empty($borderColorHover) || $borderColorHover != $borderColor)
{
$isHoverDifferent = true;
}
if ($isHoverDifferent) {
if (empty($borderWidthHover)) $borderWidthHover = $borderWidth;
if (empty($borderStyleHover)) $borderStyleHover = $borderStyle;
if (empty($borderColorHover)) $borderColorHover = $borderColor;
$this->addLocalStyle('hover', 'border',
$this->getBorderCSS($borderWidthHover, $borderStyleHover,
$borderColorHover));
}
$this->placement->attributes($this->attributes);
$width = explode('/',
$this->data->get('colwidth', 1));
if (count($width) == 2) {
if ($width[0] == 0 || $width[1] == 0) {
$width[0] = 1;
$width[1] = 2;
$this->data->set('colwidth',
'1/2');
}
$width = round($width[0] / $width[1] * 100, 1);
} else {
$width = 100;
}
$this->width = $width;
if (!AbstractComponent::$isAdmin) {
$this->makeLink();
}
}
public function setWidth($device) {
$this->style->add($device, '', 'width:' .
$this->width . '%');
}
public function setWidthAuto($device) {
$this->style->add($device, '',
'width:auto');
}
public function setWrapAfterWidth($device, $width, $gutter) {
$this->style->add($device, '',
'width:calc(' . $width . '% - ' . $gutter .
'px)');
}
protected function upgradeData() {
if ($this->data->has('verticalalign')) {
/**
* Upgrade data to device specific
*/
$this->data->set('desktopportraitverticalalign',
$this->data->get('verticalalign'));
$this->data->un_set('verticalalign');
}
}
public function getPlacement() {
return 'default';
}
private function getBorderRadiusCSS($borderRadius) {
if ($borderRadius > 0) {
return 'border-radius:' . $borderRadius .
'px;';
}
return '';
}
private function getBoxShadowCSS($boxShadow) {
$boxShadowArray = explode('|*|', $boxShadow);
if (count($boxShadowArray) == 5 && ($boxShadowArray[0] != 0
|| $boxShadowArray[1] != 0 || $boxShadowArray[2] != 0 || $boxShadowArray[3]
!= 0) && Color::hex2alpha($boxShadowArray[4]) != 0) {
return 'box-shadow:' . $boxShadowArray[0] . 'px
' . $boxShadowArray[1] . 'px ' . $boxShadowArray[2] .
'px ' . $boxShadowArray[3] . 'px ' .
Color::colorToRGBA($boxShadowArray[4]) . ';';
}
return '';
}
private function getBorderCSS($width, $style, $color) {
if ($style != 'none') {
$values = explode('|*|', $width);
$unit = 'px';
$values[4] = '';
$css = 'border-width:' . implode($unit . '
', $values) . ';';
$css .= 'border-style:' . $style . ';';
$css .= 'border-color:' . Color::colorToRGBA($color)
. ';';
return $css;
}
return '';
}
private function makeLink() {
$linkV1 = $this->data->get('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);
}
$link = $this->data->get('href');
if (($link != '#' && !empty($link))) {
$target = $this->data->get('href-target');
$link =
Link::parse($this->owner->fill($link), $this->attributes);
$this->attributes['data-href'] = $link;
$this->attributes['tabindex'] = 0;
$this->attributes['role'] =
'button';
$ariaLabel = $this->data->get('aria-label');
if (!empty($ariaLabel)) {
$this->attributes['aria-label'] = $ariaLabel;
}
if (!isset($this->attributes['onclick'])
&& !isset($this->attributes['data-n2-lightbox'])) {
if (!empty($target) && $target !=
'_self') {
$this->attributes['data-target'] =
$target;
}
$this->attributes['data-n2click'] =
"url";
}
$this->attributes['data-force-pointer'] =
"";
}
}
public function render($isAdmin) {
if ($this->isRenderAllowed()) {
$this->runPlugins();
$this->serveLocalStyle();
if ($isAdmin) {
$this->admin();
}
$this->prepareHTML();
$html = Html::tag('div', $this->colAttributes,
parent::renderContainer($isAdmin));
$html = $this->renderPlugins($html);
return Html::tag('div', $this->attributes, $html);
}
return '';
}
protected function addUniqueClass($class) {
$this->attributes['class'] .= ' ' .
$class;
$this->colAttributes['class'] .= ' ' .
$class . '-inner';
}
protected function admin() {
$linkV1 = $this->data->get('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);
}
$this->createProperty('href', '');
$this->createProperty('href-target',
'_self');
$this->createProperty('aria-label', '');
$this->createProperty('colwidth');
$this->createProperty('bgimage', '');
$this->createProperty('bgimagex', 50);
$this->createProperty('bgimagey', 50);
$this->createColorProperty('bgcolor', true,
'00000000');
$this->createProperty('bgcolorgradient',
'off');
$this->createColorProperty('bgcolorgradientend', true,
'00000000');
$this->createColorProperty('bgcolor-hover', true);
$this->createProperty('bgcolorgradient-hover');
$this->createColorProperty('bgcolorgradientend-hover',
true);
$this->createProperty('borderradius', '0');
$this->createProperty('borderradius-hover');
$this->createProperty('boxshadow',
'0|*|0|*|0|*|0|*|00000080');
$this->createProperty('boxshadow-hover');
$this->createProperty('borderwidth',
'1|*|1|*|1|*|1');
$this->createProperty('borderstyle',
'none');
$this->createProperty('bordercolor',
'FFFFFFFF');
$this->createProperty('borderwidth-hover');
$this->createProperty('borderstyle-hover');
$this->createProperty('bordercolor-hover');
$this->createProperty('opened', 1);
$this->createDeviceProperty('maxwidth',
'0');
$this->createDeviceProperty('padding',
'10|*|10|*|10|*|10');
$this->createDeviceProperty('verticalalign',
'flex-start');
$this->createDeviceProperty('inneralign',
'inherit');
$this->createDeviceProperty('order');
parent::admin();
}
/**
* @param ExportSlider $export
* @param array $layer
*/
public static function prepareExport($export, $layer) {
if (!empty($layer['bgimage'])) {
$export->addImage($layer['bgimage']);
}
$export->prepareLayer($layer['layers']);
}
public static function prepareImport($import, &$layer) {
if (!empty($layer['bgimage'])) {
$layer['bgimage'] =
$import->fixImage($layer['bgimage']);
}
$import->prepareLayers($layer['layers']);
}
public static function prepareSample(&$layer) {
if (!empty($layer['bgimage'])) {
$layer['bgimage'] =
ResourceTranslator::toUrl($layer['bgimage']);
}
ModelSlides::prepareSample($layer['layers']);
}
/**
* @param AbstractRenderableOwner $slide
* @param array $layer
*/
public static function getFilled($slide, &$layer) {
AbstractComponent::getFilled($slide, $layer);
$fields = array(
'bgimage',
'href'
);
foreach ($fields as $field) {
if (!empty($layer[$field])) {
$layer[$field] = $slide->fill($layer[$field]);
}
}
$slide->fillLayers($layer['layers']);
}
public function getOrder($device) {
$order = intval($this->data->get($device .
'order'));
if ($order > 0) {
return $order;
}
return 10;
}
public function getWidth() {
return $this->width;
}
public static $compareOrderDevice;
/**
* @param ComponentCol $column1
* @param ComponentCol $column2
*
* @return int
*/
public static function compareOrder($column1, $column2) {
$order1 = $column1->getOrder(self::$compareOrderDevice);
$order2 = $column2->getOrder(self::$compareOrderDevice);
if ($order1 == $order2) {
return 0;
}
return ($order1 < $order2) ? -1 : 1;
}
}PK9e�[]��3��)Renderable/Component/ComponentContent.phpnu�[���<?php
namespace Nextend\SmartSlider3\Renderable\Component;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Application\Model\ModelSlides;
use Nextend\SmartSlider3\BackupSlider\ExportSlider;
use Nextend\SmartSlider3\Renderable\AbstractRenderableOwner;
use Nextend\SmartSlider3\Renderable\ComponentContainer;
class ComponentContent extends AbstractComponent {
protected $type = 'content';
protected $name = 'Content';
protected $colAttributes = array(
'class' => 'n2-ss-section-main-content
n2-ss-layer-with-background n2-ss-layer-content n2-ow',
'style' => ''
);
protected $localStyle = array(
array(
"group" => "normal",
"selector" => '-inner',
"css" => array()
),
array(
"group" => "hover",
"selector" => '-inner:HOVER',
"css" => array()
),
);
public function getPlacement() {
return 'default';
}
public function __construct($index, $owner, $group, $data) {
parent::__construct($index, $owner, $group, $data);
$this->container = new ComponentContainer($owner, $this,
$data['layers']);
$this->data->un_set('layers');
$this->upgradeData();
$this->attributes['style'] = '';
$devices = $this->owner->getAvailableDevices();
$desktopPortraitSelfAlign =
$this->data->get('desktopportraitselfalign',
'inherit');
$desktopportraitInnerAlign =
$this->data->get('desktopportraitinneralign',
'inherit');
foreach ($devices as $device) {
$padding = $this->data->get($device .
'padding');
if (!empty($padding)) {
$paddingValues = $this->spacingToPxValue($padding);
$this->style->add($device, '-inner',
'padding:' . implode('px ', $paddingValues) .
'px');
}
$maxWidth = intval($this->data->get($device .
'maxwidth', 0));
if ($maxWidth > 0) {
$this->style->add($device, '',
'max-width: ' . $maxWidth . 'px');
}
$innerAlign = $this->data->get($device .
'inneralign', '');
if ($device == 'desktopportrait') {
if ($desktopportraitInnerAlign != 'inherit') {
$this->style->add($device, '-inner',
AbstractComponent::innerAlignToStyle($innerAlign));
}
} else if ($desktopportraitInnerAlign != $innerAlign) {
$this->style->add($device, '-inner',
AbstractComponent::innerAlignToStyle($innerAlign));
}
$selfAlign = $this->data->get($device .
'selfalign', '');
if ($device == 'desktopportrait') {
if ($desktopPortraitSelfAlign != 'inherit') {
$this->style->add($device, '',
AbstractComponent::selfAlignToStyle($selfAlign));
}
} else if ($desktopPortraitSelfAlign != $selfAlign) {
$this->style->add($device, '',
AbstractComponent::selfAlignToStyle($selfAlign));
}
$verticalAlign = $this->data->get($device .
'verticalalign');
if (!empty($verticalAlign)) {
$this->style->add($device, '-inner',
'justify-content:' . $verticalAlign);
}
}
$this->renderBackground();
$this->placement->attributes($this->attributes);
}
protected function upgradeData() {
if ($this->data->has('verticalalign')) {
/**
* Upgrade data to device specific
*/
$this->data->set('desktopportraitverticalalign',
$this->data->get('verticalalign'));
$this->data->un_set('verticalalign');
}
}
public function render($isAdmin) {
if ($this->isRenderAllowed()) {
if ($isAdmin || $this->hasBackground ||
count($this->container->getLayers())) {
$this->runPlugins();
$this->serveLocalStyle();
if ($isAdmin) {
$this->admin();
}
$this->prepareHTML();
$this->attributes['data-hasbackground'] =
$this->hasBackground ? '1' : '0';
$html = Html::tag('div', $this->colAttributes,
parent::renderContainer($isAdmin));
$html = $this->renderPlugins($html);
return Html::tag('div', $this->attributes,
$html);
}
}
return '';
}
protected function addUniqueClass($class) {
$this->attributes['class'] .= ' ' .
$class;
$this->colAttributes['class'] .= ' ' .
$class . '-inner';
}
protected function admin() {
$this->createDeviceProperty('verticalalign',
'center');
$this->createDeviceProperty('inneralign',
'inherit');
$this->createDeviceProperty('selfalign',
'center');
$this->createDeviceProperty('maxwidth',
'0');
$this->createDeviceProperty('padding',
'10|*|10|*|10|*|10');
$this->createProperty('bgimage', '');
$this->createProperty('bgimagex', 50);
$this->createProperty('bgimagey', 50);
$this->createColorProperty('bgcolor', true,
'00000000');
$this->createProperty('bgcolorgradient',
'off');
$this->createColorProperty('bgcolorgradientend', true,
'00000000');
$this->createColorProperty('bgcolor-hover', true);
$this->createProperty('bgcolorgradient-hover');
$this->createColorProperty('bgcolorgradientend-hover',
true);
$this->createProperty('opened', 1);
$this->createProperty('id', '');
$this->createProperty('uniqueclass', '');
$this->createProperty('class', '');
$this->createProperty('status');
$this->createProperty('generatorvisible',
'');
$this->placement->adminAttributes($this->attributes);
}
/**
* @param ExportSlider $export
* @param array $layer
*/
public static function prepareExport($export, $layer) {
if (!empty($layer['bgimage'])) {
$export->addImage($layer['bgimage']);
}
$export->prepareLayer($layer['layers']);
}
public static function prepareImport($import, &$layer) {
if (!empty($layer['bgimage'])) {
$layer['bgimage'] =
$import->fixImage($layer['bgimage']);
}
$import->prepareLayers($layer['layers']);
}
public static function prepareSample(&$layer) {
if (!empty($layer['bgimage'])) {
$layer['bgimage'] =
ResourceTranslator::toUrl($layer['bgimage']);
}
ModelSlides::prepareSample($layer['layers']);
}
/**
* @param AbstractRenderableOwner $slide
* @param array $layer
*/
public static function getFilled($slide, &$layer) {
AbstractComponent::getFilled($slide, $layer);
if (!empty($layer['bgimage'])) {
$layer['bgimage'] =
$slide->fill($layer['bgimage']);
}
$slide->fillLayers($layer['layers']);
}
}PK9e�[�Gs���'Renderable/Component/ComponentLayer.phpnu�[���<?php
namespace Nextend\SmartSlider3\Renderable\Component;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Renderable\AbstractRenderableOwner;
use Nextend\SmartSlider3\Renderable\Item\AbstractItemFrontend;
use Nextend\SmartSlider3\Renderable\Item\ItemFactory;
class ComponentLayer extends AbstractComponent {
protected $type = 'layer';
/** @var AbstractItemFrontend */
private $item;
public function __construct($index, $owner, $group, $data) {
parent::__construct($index, $owner, $group, $data);
$this->attributes['style'] = '';
$item = $this->data->get('item');
if (empty($item)) {
$items = $this->data->get('items');
$item = $items[0];
}
$this->item = ItemFactory::create($this, $item);
$this->placement->attributes($this->attributes);
}
public function render($isAdmin) {
if ($this->isRenderAllowed()) {
$this->runPlugins();
$this->serveLocalStyle();
$this->prepareHTML();
if ($isAdmin) {
$renderedItem = $this->item->renderAdmin();
} else {
$renderedItem = $this->item->render();
}
if ($renderedItem === false) {
return '';
}
if ($this->item->needHeight()) {
$this->attributes['class'] .= '
n2-ss-layer--need-height';
}
if ($this->item->isAuto()) {
$this->attributes['class'] .= '
n2-ss-layer--auto';
}
$html = $this->renderPlugins($renderedItem);
if ($isAdmin) {
$this->admin();
}
return Html::tag('div', $this->attributes, $html);
}
return '';
}
/**
* @param AbstractRenderableOwner $slide
* @param array $layer
*/
public static function getFilled($slide, &$layer) {
AbstractComponent::getFilled($slide, $layer);
if (empty($layer['item'])) {
$layer['item'] = $layer['items'][0];
unset($layer['items']);
}
ItemFactory::getFilled($slide, $layer['item']);
}
public static function prepareExport($export, $layer) {
if (empty($layer['item'])) {
$layer['item'] = $layer['items'][0];
unset($layer['items']);
}
ItemFactory::prepareExport($export, $layer['item']);
}
public static function prepareImport($import, &$layer) {
if (empty($layer['item'])) {
$layer['item'] = $layer['items'][0];
unset($layer['items']);
}
$layer['item'] = ItemFactory::prepareImport($import,
$layer['item']);
}
public static function prepareSample(&$layer) {
if (empty($layer['item'])) {
$layer['item'] = $layer['items'][0];
unset($layer['items']);
}
$layer['item'] =
ItemFactory::prepareSample($layer['item']);
}
}PK9e�[ǝeny<y<%Renderable/Component/ComponentRow.phpnu�[���<?php
namespace Nextend\SmartSlider3\Renderable\Component;
use Nextend\Framework\Parser\Color;
use Nextend\Framework\Parser\Common;
use Nextend\Framework\Parser\Link;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Application\Model\ModelSlides;
use Nextend\SmartSlider3\BackupSlider\ExportSlider;
use Nextend\SmartSlider3\Renderable\AbstractRenderableOwner;
use Nextend\SmartSlider3\Renderable\ComponentContainer;
class ComponentRow extends AbstractComponent {
protected $type = 'row';
protected $rowAttributes = array(
'class' => 'n2-ss-layer-row
n2-ss-layer-with-background',
'style' => ''
);
protected $rowAttributesInner = array(
'class' => 'n2-ss-layer-row-inner '
);
protected $localStyle = array(
array(
"group" => "normal",
"selector" => '-inner',
"css" => array()
),
array(
"group" => "hover",
"selector" => '-inner:HOVER',
"css" => array()
),
);
protected $html = '';
public function __construct($index, $owner, $group, $data) {
parent::__construct($index, $owner, $group, $data);
$this->container = new ComponentContainer($owner, $this,
$data['cols']);
$this->data->un_set('cols');
$this->data->un_set('inneralign');
$fullWidth = $this->data->get('fullwidth', 1);
if ($fullWidth) {
$this->attributes['class'] .= '
n2-ss-layer--block';
} else {
$this->attributes['class'] .= '
n2-ss-layer--auto';
}
$devices = $this->owner->getAvailableDevices();
$desktopportraitInnerAlign =
$this->data->get('desktopportraitinneralign',
'inherit');
$desktopportraitGutter =
$this->getGutter('desktopportrait');
if (empty($desktopportraitGutter)) {
$desktopportraitGutter = 0;
}
$desktopportraitWrapAfter =
$this->data->get('desktopportraitwrapafter', 0);
if (empty($desktopportraitWrapAfter)) {
$desktopportraitWrapAfter = 0;
}
foreach ($devices as $device) {
$padding = $this->data->get($device .
'padding');
if (!empty($padding)) {
$paddingValues = $this->spacingToPxValue($padding);
$this->style->add($device, '-inner',
'padding:' . implode('px ', $paddingValues) .
'px');
}
$innerAlign = $this->data->get($device .
'inneralign', '');
if ($device == 'desktopportrait') {
if ($desktopportraitInnerAlign != 'inherit') {
$this->style->add($device, '-inner',
AbstractComponent::innerAlignToStyle($innerAlign));
}
} else if ($desktopportraitInnerAlign != $innerAlign) {
$this->style->add($device, '-inner',
AbstractComponent::innerAlignToStyle($innerAlign));
}
$gutter = $this->getGutter($device);
$wrapAfter = $this->data->get($device .
'wrapafter', '');
if ($wrapAfter === '') {
$wrapAfter = $desktopportraitWrapAfter; // inherit desktop
value
}
if ($gutter !== null) {
$sideGutter = $gutter / 2;
/**
* +1 to fix Safari line break
*
* @see https://bugs.webkit.org/show_bug.cgi?id=225962
* @see SSDEV-2980
*/
$this->style->add($device, '-inner >
.n2-ss-layer-row-inner', 'width:calc(100% + ' . ($gutter +
1) . 'px);margin:-' . $sideGutter . 'px');
$this->style->add($device, '-inner >
.n2-ss-layer-row-inner >
.n2-ss-layer[data-sstype="col"]', 'margin:' .
$sideGutter . 'px');
} else {
$gutter = $desktopportraitGutter;
}
$columns = $this->getSortedColumns($device);
$columnsCount = count($columns);
if ($wrapAfter > 0) {
$this->style->add($device, '-inner >
.n2-ss-layer-row-inner', 'flex-wrap:wrap;');
if ($fullWidth && $wrapAfter <= $columnsCount) {
$rows = array_fill(0, ceil($columnsCount / $wrapAfter),
0);
for ($i = 0; $i < $columnsCount; $i++) {
$rowIndex = floor($i / $wrapAfter);
$rows[$rowIndex] += $columns[$i]->getWidth();
}
for ($i = 0; $i < $columnsCount; $i++) {
$rowIndex = floor($i / $wrapAfter);
$columns[$i]->setWrapAfterWidth($device,
floor($columns[$i]->getWidth() / $rows[$rowIndex] * 100), $gutter);
}
} else {
foreach ($columns as $column) {
$column->setWidthAuto($device);
}
}
} else {
if ($fullWidth) {
foreach ($columns as $column) {
$column->setWidth($device);
}
} else {
foreach ($columns as $column) {
$column->setWidthAuto($device);
}
}
}
}
$this->renderBackground();
$this->attributes['class'] .= '
n2-ss-has-self-align';
$stretch = $this->data->get('stretch', 0);
if ($stretch) {
$this->attributes['class'] .= '
n2-ss-stretch-layer';
}
$borderWidth = $this->data->get('borderwidth',
'1|*|1|*|1|*|1');
$borderStyle = $this->data->get('borderstyle',
'none');
$borderColor = $this->data->get('bordercolor',
'ffffffff');
if ($borderStyle != 'none') {
$this->addLocalStyle('normal', 'border',
$this->getBorderCSS($borderWidth, $borderStyle, $borderColor));
}
$borderWidthHover =
$this->data->get('borderwidth-hover');
$borderStyleHover =
$this->data->get('borderstyle-hover');
$borderColorHover =
$this->data->get('bordercolor-hover');
$isHoverDifferent = false;
if (!empty($borderWidthHover) || $borderWidthHover != $borderWidth)
{
$isHoverDifferent = true;
}
if (!empty($borderStyleHover) || $borderStyleHover != $borderStyle)
{
$isHoverDifferent = true;
}
if (!empty($borderColorHover) || $borderColorHover != $borderColor)
{
$isHoverDifferent = true;
}
if ($isHoverDifferent) {
if (empty($borderWidthHover)) $borderWidthHover = $borderWidth;
if (empty($borderStyleHover)) $borderStyleHover = $borderStyle;
if (empty($borderColorHover)) $borderColorHover = $borderColor;
$this->addLocalStyle('hover', 'border',
$this->getBorderCSS($borderWidthHover, $borderStyleHover,
$borderColorHover));
}
$borderRadius =
intval($this->data->get('borderradius', 0));
$this->addLocalStyle('normal',
'borderradius', $this->getBorderRadiusCSS($borderRadius));
$borderRadiusHover =
intval($this->data->get('borderradius-hover'));
if (!empty($borderRadiusHover) && $borderRadiusHover !=
$borderRadius) {
$this->addLocalStyle('hover',
'borderradius',
$this->getBorderRadiusCSS($borderRadiusHover));
}
$boxShadow = $this->data->get('boxshadow',
'0|*|0|*|0|*|0|*|00000080');
$this->addLocalStyle('normal', 'boxshadow',
$this->getBoxShadowCSS($boxShadow));
$boxShadowHover =
$this->data->get('boxshadow-hover');
if (!empty($boxShadowHover) && $boxShadowHover !=
$boxShadow) {
$this->addLocalStyle('hover',
'boxshadow', $this->getBoxShadowCSS($boxShadowHover));
}
$this->placement->attributes($this->attributes);
if (!AbstractComponent::$isAdmin) {
$this->makeLink();
}
}
public function getGutter($device) {
return $this->data->get($device . 'gutter', null);
}
public function render($isAdmin) {
if ($this->isRenderAllowed()) {
$this->runPlugins();
$this->serveLocalStyle();
if ($isAdmin) {
$this->admin();
}
$this->prepareHTML();
$html = Html::tag('div', $this->rowAttributes,
Html::tag('div', $this->rowAttributesInner,
parent::renderContainer($isAdmin)));
$html = $this->renderPlugins($html);
return Html::tag('div', $this->attributes, $html);
}
return '';
}
/**
* @return ComponentCol[]
*/
protected function getColumns() {
$layers = $this->container->getLayers();
$columns = array();
for ($i = 0; $i < count($layers); $i++) {
if ($layers[$i] instanceof ComponentCol) {
$columns[] = $layers[$i];
}
}
return $columns;
}
protected function getSortedColumns($device) {
$columns = $this->getColumns();
for ($i = count($columns) - 1; $i >= 0; $i--) {
if (!$columns[$i]->isShown($device)) {
array_splice($columns, $i, 1);
}
}
ComponentCol::$compareOrderDevice = $device;
usort($columns, array(
ComponentCol::class,
'compareOrder'
));
return $columns;
}
protected function addUniqueClass($class) {
$this->attributes['class'] .= ' ' .
$class;
$this->rowAttributes['class'] .= ' ' .
$class . '-inner';
}
private function makeLink() {
$linkV1 = $this->data->get('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);
}
$link = $this->data->get('href');
if (($link != '#' && !empty($link))) {
$target = $this->data->get('href-target');
$link =
Link::parse($this->owner->fill($link), $this->attributes);
$this->attributes['data-href'] = $link;
$this->attributes['tabindex'] = 0;
$this->attributes['role'] =
'button';
$ariaLabel = $this->data->get('aria-label');
if (!empty($ariaLabel)) {
$this->attributes['aria-label'] = $ariaLabel;
}
if (!isset($this->attributes['onclick'])
&& !isset($this->attributes['data-n2-lightbox'])) {
if (!empty($target) && $target !=
'_self') {
$this->attributes['data-target'] =
$target;
}
$this->attributes['data-n2click'] =
"url";
}
$this->attributes['data-force-pointer'] =
"";
}
}
protected function admin() {
$linkV1 = $this->data->get('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);
}
$this->createProperty('href', '');
$this->createProperty('href-target',
'_self');
$this->createProperty('aria-label', '');
$this->createProperty('bgimage', '');
$this->createProperty('bgimagex', 50);
$this->createProperty('bgimagey', 50);
$this->createColorProperty('bgcolor', true,
'00000000');
$this->createProperty('bgcolorgradient',
'off');
$this->createColorProperty('bgcolorgradientend', true,
'00000000');
$this->createColorProperty('bgcolor-hover', true);
$this->createProperty('bgcolorgradient-hover');
$this->createColorProperty('bgcolorgradientend-hover',
true);
$this->createProperty('borderwidth',
'1|*|1|*|1|*|1');
$this->createProperty('borderstyle',
'none');
$this->createProperty('bordercolor',
'FFFFFFFF');
$this->createProperty('borderwidth-hover');
$this->createProperty('borderstyle-hover');
$this->createProperty('bordercolor-hover');
$this->createProperty('borderradius', 0);
$this->createProperty('borderradius-hover');
$this->createProperty('boxshadow',
'0|*|0|*|0|*|0|*|00000080');
$this->createProperty('boxshadow-hover');
$this->createProperty('fullwidth', '1');
$this->createProperty('stretch', '0');
$this->createProperty('opened', 1);
$this->createDeviceProperty('padding',
'10|*|10|*|10|*|10');
$this->createDeviceProperty('gutter', 20);
$this->createDeviceProperty('wrapafter', 0);
$this->createDeviceProperty('inneralign',
'inherit');
parent::admin();
}
/**
* @param ExportSlider $export
* @param array $layer
*/
public static function prepareExport($export, $layer) {
if (!empty($layer['bgimage'])) {
$export->addImage($layer['bgimage']);
}
$export->prepareLayer($layer['cols']);
}
public static function prepareImport($import, &$layer) {
if (!empty($layer['bgimage'])) {
$layer['bgimage'] =
$import->fixImage($layer['bgimage']);
}
$import->prepareLayers($layer['cols']);
}
public static function prepareSample(&$layer) {
if (!empty($layer['bgimage'])) {
$layer['bgimage'] =
ResourceTranslator::toUrl($layer['bgimage']);
}
ModelSlides::prepareSample($layer['cols']);
}
/**
* @param AbstractRenderableOwner $slide
* @param array $layer
*/
public static function getFilled($slide, &$layer) {
AbstractComponent::getFilled($slide, $layer);
$fields = array(
'bgimage',
'href'
);
foreach ($fields as $field) {
if (!empty($layer[$field])) {
$layer[$field] = $slide->fill($layer[$field]);
}
}
$slide->fillLayers($layer['cols']);
}
private function getBorderCSS($width, $style, $color) {
if ($style != 'none') {
$values = explode('|*|', $width);
$unit = 'px';
$values[4] = '';
$css = 'border-width:' . implode($unit . '
', $values) . ';';
$css .= 'border-style:' . $style . ';';
$css .= 'border-color:' . Color::colorToRGBA($color)
. ';';
return $css;
}
return '';
}
private function getBorderRadiusCSS($borderRadius) {
if ($borderRadius > 0) {
return 'border-radius:' . $borderRadius .
'px;';
}
return '';
}
private function getBoxShadowCSS($boxShadow) {
$boxShadowArray = explode('|*|', $boxShadow);
if (count($boxShadowArray) == 5 && ($boxShadowArray[0] != 0
|| $boxShadowArray[1] != 0 || $boxShadowArray[2] != 0 || $boxShadowArray[3]
!= 0) && Color::hex2alpha($boxShadowArray[4]) != 0) {
return 'box-shadow:' . $boxShadowArray[0] . 'px
' . $boxShadowArray[1] . 'px ' . $boxShadowArray[2] .
'px ' . $boxShadowArray[3] . 'px ' .
Color::colorToRGBA($boxShadowArray[4]) . ';';
}
return '';
}
}PK9e�[:��*AA'Renderable/Component/ComponentSlide.phpnu�[���<?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);
}
$backgroundMode =
$this->data->get('backgroundMode');
if ($backgroundMode == 'fixed' || $backgroundMode ==
'tile') {
$this->data->set('backgroundMode',
'fill');
}
if ($this->data->get('publish_up') ==
'1970-01-01 00:00:00') {
$this->data->set('publish_up', '0000-00-00
00:00:00');
}
if ($this->data->get('publish_down') ==
'1970-01-01 00:00:00') {
$this->data->set('publish_down',
'0000-00-00 00:00:00');
}
}
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('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('backgroundVideoMp4',
'');
$this->createProperty('backgroundVideoOpacity', 100);
$this->createProperty('backgroundVideoMuted', 1);
$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));
}
}PK9e�[6��x��Renderable/Component/Style.phpnu�[���<?php
namespace Nextend\SmartSlider3\Renderable\Component;
class Style {
public $styles = array(
'all' => array(),
'desktoplandscape' => array(),
'tabletlandscape' => array(),
'tabletportrait' => array(),
'mobilelandscape' => array(),
'mobileportrait' => array(),
);
/**
* @var AbstractComponent
*/
protected $component;
/**
* Style constructor.
*
* @param AbstractComponent $component
*/
public function __construct($component) {
$this->component = $component;
}
public function add($device, $selector, $css) {
if (!empty($css)) {
if ($device == 'desktopportrait') {
$device = 'all';
}
$this->addOnly($device, $selector, $css);
}
}
public function addOnly($device, $selector, $css) {
if (!empty($css)) {
if (!isset($this->styles[$device][$selector])) {
$this->styles[$device][$selector] = array();
}
$this->styles[$device][$selector][] = $css;
}
}
}PK9e�[���??!Renderable/ComponentContainer.phpnu�[���<?php
namespace Nextend\SmartSlider3\Renderable;
use Exception;
use Nextend\Framework\Notification\Notification;
use Nextend\SmartSlider3\Renderable\Component\AbstractComponent;
use Nextend\SmartSlider3\Renderable\Component\ComponentCol;
use Nextend\SmartSlider3\Renderable\Component\ComponentContent;
use Nextend\SmartSlider3\Renderable\Component\ComponentLayer;
use Nextend\SmartSlider3\Renderable\Component\ComponentRow;
use Nextend\SmartSlider3\Slider\Slide;
class ComponentContainer {
/** @var AbstractComponent[] */
protected $layers = array();
protected $index = 0;
/** @var Slide */
protected $slide;
/** @var AbstractComponent */
protected $component;
/**
*
* @param Slide $slide
* @param AbstractComponent $component
* @param array $componentsData
*/
public function __construct($slide, $component, $componentsData) {
$this->slide = $slide;
$this->component = $component;
if (is_array($componentsData)) {
if ($component->getType() == 'slide') {
$componentsData = array_reverse($componentsData);
}
foreach ($componentsData AS $componentData) {
$this->addComponent($componentData);
}
}
}
private function addComponent($componentData) {
$this->index++;
if (!isset($componentData['type'])) {
$componentData['type'] = 'layer';
}
switch ($componentData['type']) {
case 'content':
$this->layers[] = new ComponentContent($this->index,
$this->slide, $this->component, $componentData);
break;
case 'row':
$this->layers[] = new ComponentRow($this->index,
$this->slide, $this->component, $componentData);
break;
case 'col':
$this->layers[] = new ComponentCol($this->index,
$this->slide, $this->component, $componentData);
break;
case 'layer':
try {
if (empty($componentData['item'])) {
if (empty($componentData['items'])) {
$this->index--;
break;
}
$componentData['item'] =
$componentData['items'][0];
}
$layer = new ComponentLayer($this->index,
$this->slide, $this->component, $componentData);
$this->layers[] = $layer;
} catch (Exception $e) {
$this->index--;
Notification::error($e->getMessage());
}
break;
case 'group':
$componentData['layers'] =
array_reverse($componentData['layers']);
foreach ($componentData['layers'] AS
$subComponentData) {
$this->addComponent($subComponentData);
}
break;
}
}
public function addContentLayer($slide, $component) {
$content = false;
$layerCount = count($this->layers);
for ($i = 0; $i < $layerCount; $i++) {
if ($this->layers[$i] instanceof ComponentContent) {
$content = $this->layers[$i];
break;
}
}
if ($content === false) {
array_unshift($this->layers, new
ComponentContent($layerCount + 1, $slide, $component, array(
'bgimage' => '',
'bgimagex' => 50,
'bgimagey' => 50,
'bgcolor' =>
'00000000',
'bgcolorgradient' =>
'off',
'verticalalign' =>
'center',
'desktopportraitinneralign' =>
'inherit',
'desktopportraitpadding' =>
'10|*|10|*|10|*|10|*|px',
'layers' => array()
), 'absolute'));
}
return $content;
}
/**
* @return AbstractComponent[]
*/
public function getLayers() {
return $this->layers;
}
public function render($isAdmin) {
$html = '';
foreach ($this->layers as $layer) {
$html .= $layer->render($isAdmin);
}
return $html;
}
}PK9e�[cR>-bb
Renderable/Item/AbstractItem.phpnu�[���<?php
namespace Nextend\SmartSlider3\Renderable\Item;
use Nextend\Framework\Data\Data;
use Nextend\Framework\Font\FontParser;
use Nextend\Framework\Form\ContainerInterface;
use Nextend\Framework\Model\Section;
use Nextend\Framework\Pattern\GetAssetsPathTrait;
use Nextend\Framework\Pattern\OrderableTrait;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\Framework\Style\StyleParser;
use Nextend\SmartSlider3\BackupSlider\ExportSlider;
use Nextend\SmartSlider3\BackupSlider\ImportSlider;
use Nextend\SmartSlider3\Renderable\AbstractRenderableOwner;
use Nextend\SmartSlider3\Slider\Admin\AdminSlider;
abstract class AbstractItem {
use GetAssetsPathTrait, OrderableTrait;
protected $layerProperties = array();
protected $fonts = array();
protected $styles = array();
/**
* AbstractItem constructor.
*
* @param ItemFactory $factory
*/
public function __construct($factory) {
$this->initDefault();
$factory->addItem($this);
}
private function initDefault() {
foreach ($this->fonts AS &$fontData) {
$this->loadDefaultFont($fontData['defaultName'],
$fontData['value']);
}
foreach ($this->styles AS &$styleData) {
$this->loadDefaultStyle($styleData['defaultName'],
$styleData['value']);
}
}
protected function loadDefaultFont($name, &$value) {
$res = Section::get('smartslider', 'default',
$name);
if (is_array($res)) {
$value = $res['value'];
}
$value = FontParser::parse($value);
}
protected function loadDefaultStyle($name, &$value) {
$res = Section::get('smartslider', 'default',
$name);
if (is_array($res)) {
$value = $res['value'];
}
$value = StyleParser::parse($value);
}
/**
* @param $id
* @param $itemData
* @param $layer
*
* @return AbstractItemFrontend
*/
public abstract function createFrontend($id, $itemData, $layer);
/**
* @return string
*/
public abstract function getTitle();
/**
* @return string
*/
public abstract function getIcon();
/**
* @return string
*/
public function getGroup() {
return n2_x('Basic', 'Layer group');
}
public function getLayerProperties() {
return $this->layerProperties;
}
public function isLegacy() {
return false;
}
public function getValues() {
$values = array();
foreach ($this->fonts AS $name => $fontData) {
$values[$name] = $fontData['value'];
}
foreach ($this->styles AS $name => $styleData) {
$values[$name] = $styleData['value'];
}
return $values;
}
/**
* @param $slide AbstractRenderableOwner
* @param $data Data
*
* @return Data
*/
public function getFilled($slide, $data) {
$this->upgradeData($data);
return $data;
}
/**
* @param Data $data
*/
public function upgradeData($data) {
}
/**
* Fix linked fonts/styles for the editor
*
* @param Data $data
*/
public function adminNormalizeFontsStyles($data) {
foreach ($this->fonts AS $name => $fontData) {
$data->set($name, FontParser::parse($data->get($name)));
}
foreach ($this->styles AS $name => $styleData) {
$data->set($name, StyleParser::parse($data->get($name)));
}
}
/**
* @param ExportSlider $export
* @param Data $data
*/
public function prepareExport($export, $data) {
$this->upgradeData($data);
}
/**
* @param ImportSlider $import
* @param Data $data
*
* @return Data
*/
public function prepareImport($import, $data) {
$this->upgradeData($data);
return $data;
}
/**
* @param Data $data
*
* @return Data
*/
public function prepareSample($data) {
$this->upgradeData($data);
return $data;
}
public function fixImage($image) {
return ResourceTranslator::toUrl($image);
}
public function fixLightbox($url) {
preg_match('/^([a-zA-Z]+)\[(.*)](.*)/', $url, $matches);
if (!empty($matches) && $matches[1] ==
'lightbox') {
$images = explode(',', $matches[2]);
$newImages = array();
foreach ($images AS $image) {
$newImages[] = ResourceTranslator::toUrl($image);
}
$url = 'lightbox[' . implode(',',
$newImages) . ']' . $matches[3];
}
return $url;
}
/**
* @param AdminSlider $renderable
*/
public function loadResources($renderable) {
}
/**
* @return string
*/
public abstract function getType();
protected function isBuiltIn() {
return false;
}
/**
* @param ContainerInterface $container
*/
public abstract function renderFields($container);
/**
* @param ContainerInterface $container
*/
public function globalDefaultItemFontAndStyle($container) {
}
}PK9e�[C[�%��(Renderable/Item/AbstractItemFrontend.phpnu�[���<?php
namespace Nextend\SmartSlider3\Renderable\Item;
use Nextend\Framework\Data\Data;
use Nextend\Framework\Parser\Link;
use Nextend\Framework\Pattern\GetAssetsPathTrait;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Renderable\Component\ComponentLayer;
abstract class AbstractItemFrontend {
use GetAssetsPathTrait;
/** @var AbstractItem */
protected $item;
protected $id;
/** @var ComponentLayer */
protected $layer;
/** @var Data */
public $data;
protected $isEditor = false;
/**
*
* @param AbstractItem $item
* @param string $id
* @param array $itemData
* @param ComponentLayer $layer
*/
public function __construct($item, $id, $itemData, $layer) {
$this->item = $item;
$this->id = $id;
$this->data = new Data($itemData);
$this->layer = $layer;
$this->fillDefault($item->getValues());
}
private function fillDefault($defaults) {
$this->item->upgradeData($this->data);
$this->data->fillDefault($defaults);
}
public abstract function render();
public function renderAdmin() {
$this->isEditor = true;
/**
* Fix linked fonts/styles for the editor
*/
$this->item->adminNormalizeFontsStyles($this->data);
$rendered = $this->renderAdminTemplate();
$json = $this->data->toJson();
return Html::tag("div", array(
"class" => "n2-ss-item
n2-ss-item-" . $this->item->getType(),
"data-item" => $this->item->getType(),
"data-itemvalues" => $json
), $rendered);
}
protected abstract function renderAdminTemplate();
public function needHeight() {
return false;
}
public function isAuto() {
return false;
}
protected function hasLink() {
$link = $this->data->get('href', '#');
if (($link != '#' && !empty($link))) {
return true;
}
return false;
}
protected function getLink($content, $attributes = array(),
$renderEmpty = false) {
$link = $this->data->get('href', '#');
$target = $this->data->get('href-target',
'#');
$rel = $this->data->get('href-rel',
'#');
$class = $this->data->get('href-class',
'');
if (($link != '#' && !empty($link)) ||
$renderEmpty === true) {
$link = Link::parse($this->layer->getOwner()
->fill($link), $attributes,
$this->isEditor);
if (!empty($target) && $target != '_self') {
$attributes['target'] = $target;
}
if (!empty($rel)) {
$attributes['rel'] = $rel;
}
if (!empty($class)) {
$attributes['class'] = $class;
}
return Html::link($content, $link, $attributes);
}
return $content;
}
}PK9e�[Ă
Att%Renderable/Item/Button/ItemButton.phpnu�[���<?php
namespace Nextend\SmartSlider3\Renderable\Item\Button;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\Font;
use Nextend\Framework\Form\Element\Hidden\HiddenFont;
use Nextend\Framework\Form\Element\Hidden\HiddenStyle;
use Nextend\Framework\Form\Element\Icon;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Select\LinkTarget;
use Nextend\Framework\Form\Element\Style;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Element\Text\NumberSlider;
use Nextend\Framework\Form\Element\Text\Url;
use Nextend\Framework\Form\Fieldset;
use Nextend\Framework\Parser\Common;
use Nextend\SmartSlider3\Renderable\Item\AbstractItem;
class ItemButton extends AbstractItem {
protected $ordering = 4;
protected $fonts = array(
'font' => array(
'defaultName' => 'item-button-font',
'value' =>
'{"data":[{"color":"ffffffff","size":"14||px","align":"center"},
{"extra":""}]}'
)
);
protected $styles = array(
'style' => array(
'defaultName' => 'item-button-style',
'value' =>
'{"data":[{"backgroundcolor":"5cba3cff","padding":"10|*|30|*|10|*|30|*|px"},
{"extra":""}]}'
)
);
protected function isBuiltIn() {
return true;
}
public function getType() {
return 'button';
}
public function getTitle() {
return n2_('Button');
}
public function getIcon() {
return 'ssi_32 ssi_32--button';
}
public function createFrontend($id, $itemData, $layer) {
return new ItemButtonFrontend($this, $id, $itemData, $layer);
}
public function globalDefaultItemFontAndStyle($container) {
$table = new ContainerTable($container, $this->getType(),
$this->getTitle());
$row1 = $table->createRow($this->getType() .
'-1');
new Font($row1, 'item-button-font', false,
$this->fonts['font']['value'], array(
'mode' => 'link'
));
new Style($row1, 'item-button-style', false,
$this->styles['style']['value'], array(
'mode' => 'button'
));
}
public function getValues() {
return parent::getValues() + array(
'content' => n2_x('MORE',
'Button layer default text'),
'nowrap' => 1,
'fullwidth' => 0,
'href' => '#',
'href-target' => '_self',
'href-rel' => '',
'class' => '',
'icon' => '',
'iconsize' => '100',
'iconspacing' => '30',
'iconplacement' => 'left',
);
}
public function upgradeData($data) {
$linkV1 = $data->get('link', '');
if (!empty($linkV1)) {
list($link, $target, $rel) =
array_pad((array)Common::parse($linkV1), 3, '');
$data->un_set('link');
$data->set('href', $link);
$data->set('href-target', $target);
$data->set('href-rel', $rel);
}
}
public function getFilled($slide, $data) {
$data = parent::getFilled($slide, $data);
$data->set('content',
$slide->fill($data->get('content', '')));
$data->set('href',
$slide->fill($data->get('href', '#|*|')));
return $data;
}
public function prepareExport($export, $data) {
parent::prepareExport($export, $data);
$export->addVisual($data->get('font'));
$export->addVisual($data->get('style'));
$export->addLightbox($data->get('href'));
}
public function prepareImport($import, $data) {
$data = parent::prepareImport($import, $data);
$data->set('font',
$import->fixSection($data->get('font')));
$data->set('style',
$import->fixSection($data->get('style')));
$data->set('href',
$import->fixLightbox($data->get('href')));
return $data;
}
public function loadResources($renderable) {
parent::loadResources($renderable);
$renderable->addLess(self::getAssetsPath() .
"/button.n2less", array(
"sliderid" => $renderable->elementId
));
}
public function renderFields($container) {
$settings = new
Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-button', n2_('General'));
new Text($settings, 'content', n2_('Label'),
n2_('Button'), array(
'style' => 'width:302px;'
));
new HiddenFont($settings, 'font', false, '',
array(
'mode' => 'link'
));
new HiddenStyle($settings, 'style', false, '',
array(
'mode' => 'button'
));
new OnOff($settings, 'fullwidth', n2_('Full
width'), 1);
new OnOff($settings, 'nowrap', n2_('No wrap'),
1, array(
'tipLabel' => n2_('No wrap'),
'tipDescription' => n2_('Prevents the text
from breaking into more lines')
));
$link = new Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-button-link', n2_('Link'));
new Url($link, 'href', n2_('Link'),
'', array(
'relatedFields' => array(
'item_buttonhref-target',
'item_buttonhref-rel'
),
'width' => 248
));
new LinkTarget($link, 'href-target', n2_('Target
window'));
new Text($link, 'href-rel', n2_('Rel'),
'', array(
'style' => 'width:195px;',
'tipLabel' => n2_('Rel'),
'tipDescription' => sprintf(n2_('Enter the
%1$s rel attribute %2$s that represents the relationship between the
current document and the linked document. Multiple rel attributes can be
separated with space. E.g. nofollow noopener noreferrer'), '<a
href="https://www.w3schools.com/TAGS/att_a_rel.asp"
target="_blank">', '</a>')
));
$icon = new Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-button-icon', n2_('Icon'));
new Icon($icon, 'icon', n2_('Icon'),
'', array(
'hasClear' => true,
'relatedFields' => array(
'item_buttoniconsize',
'item_buttoniconspacing',
'item_buttoniconplacement'
)
));
new NumberSlider($icon, 'iconsize',
n2_('Size'), 100, array(
'min' => 5,
'max' => 1000,
'sliderMax' => 300,
'step' => 5,
'wide' => 4,
'unit' => 'px'
));
new NumberSlider($icon, 'iconspacing',
n2_('Spacing'), 30, array(
'min' => 0,
'max' => 300,
'step' => 1,
'wide' => 4,
'unit' => '%'
));
new Select($icon, 'iconplacement',
n2_('Placement'), '', array(
'options' => array(
'left' => n2_('Left'),
'right' => n2_('Right')
)
));
$dev = new Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-button-dev', n2_('Advanced'));
new Text($dev, 'class', n2_('CSS Class'),
'', array(
'style' => 'width: 302px;',
'tipLabel' => n2_('CSS Class'),
'tipDescription' => sprintf(n2_('Class on the
%s element.'), '<a>'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1834-button-layer#advanced'
));
}
}PK9e�[�w��
�
-Renderable/Item/Button/ItemButtonFrontend.phpnu�[���<?php
namespace Nextend\SmartSlider3\Renderable\Item\Button;
use Nextend\Framework\Icon\Icon;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Renderable\AbstractRenderableOwner;
use Nextend\SmartSlider3\Renderable\Item\AbstractItemFrontend;
class ItemButtonFrontend extends AbstractItemFrontend {
public function render() {
return $this->getHtml();
}
public function renderAdminTemplate() {
return $this->getHtml();
}
private function getHtml() {
$owner = $this->layer->getOwner();
$this->loadResources($owner);
$font =
$owner->addFont($this->data->get('font'),
'link');
$html = Html::openTag("div", array(
"class" => "n2-ss-button-container
n2-ss-item-content n2-ow " . $font .
($this->data->get('nowrap', 1) ? ' n2-ss-nowrap'
: '') . ($this->isAuto() ? '
n2-ss-button-container--non-full-width' : '')
));
$content = '<div>' .
$owner->fill($this->data->get("content")) .
'</div>';
$attrs = array();
$icon = $this->data->get('icon');
if ($icon) {
$iconPlacement =
$this->data->get('iconplacement', 'left');
$iconData = Icon::render($icon);
if ($iconData) {
$iconStyle = 'font-size:' .
$this->data->get('iconsize') . '%;';
if ($iconPlacement == 'right') {
$iconStyle .= 'margin-left:' .
($this->data->get('iconspacing') / 100) . 'em;';
} else {
$iconStyle .= 'margin-right:' .
($this->data->get('iconspacing') / 100) . 'em;';
}
$iconHTML = '<span class="n2i ' .
$iconData['class'] . '" style="' . $iconStyle
. '">' . $iconData['ligature'] .
'</span>';
if ($iconPlacement == 'right') {
$content = $content . $iconHTML;
} else {
$content = $iconHTML . $content;
}
$attrs['data-iconplacement'] = $iconPlacement;
}
}
$style =
$owner->addStyle($this->data->get('style'),
'heading');
$html .= $this->getLink('<div>' . $content .
'</div>', $attrs + array(
"class" => "{$style} n2-ow " .
$owner->fill($this->data->get('class', ''))
), true);
$html .= Html::closeTag("div");
return $html;
}
/**
* @param AbstractRenderableOwner $owner
*/
public function loadResources($owner) {
$owner->addLess(self::getAssetsPath() .
"/button.n2less", array(
"sliderid" => $owner->getElementID()
));
}
public function isAuto() {
return !$this->data->get('fullwidth', 0);
}
}PK9e�[cӍ-�(�('Renderable/Item/Heading/ItemHeading.phpnu�[���<?php
namespace Nextend\SmartSlider3\Renderable\Item\Heading;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\Font;
use Nextend\Framework\Form\Element\Hidden\HiddenFont;
use Nextend\Framework\Form\Element\Hidden\HiddenStyle;
use Nextend\Framework\Form\Element\MixedField;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Select\LinkTarget;
use Nextend\Framework\Form\Element\Style;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Element\Text\Number;
use Nextend\Framework\Form\Element\Text\NumberAutoComplete;
use Nextend\Framework\Form\Element\Text\Url;
use Nextend\Framework\Form\Element\Textarea;
use Nextend\Framework\Form\Fieldset;
use Nextend\Framework\Parser\Common;
use Nextend\SmartSlider3\Renderable\Item\AbstractItem;
use Nextend\SmartSlider3Pro\Form\Element\SplitTextAnimation;
class ItemHeading extends AbstractItem {
protected $ordering = 1;
protected $fonts = array(
'font' => array(
'defaultName' => 'item-heading-font',
'value' =>
'{"data":[{"color":"ffffffff","size":"36||px","align":"inherit"},{"extra":""}]}'
)
);
protected $styles = array(
'style' => array(
'defaultName' => 'item-heading-style',
'value' => ''
)
);
protected function isBuiltIn() {
return true;
}
public function getType() {
return 'heading';
}
public function getTitle() {
return n2_('Heading');
}
public function getIcon() {
return 'ssi_32 ssi_32--heading';
}
public function createFrontend($id, $itemData, $layer) {
return new ItemHeadingFrontend($this, $id, $itemData, $layer);
}
public function getValues() {
return parent::getValues() + array(
'priority' => 'div',
'fullwidth' => 1,
'nowrap' => 0,
'heading' => n2_('Heading
layer'),
'title' => '',
'href' => '#',
'href-target' => '_self',
'href-rel' => '',
'split-text-transform-origin' =>
'50|*|50|*|0',
'split-text-backface-visibility' => 1,
'split-text-animation-in' => '',
'split-text-delay-in' => 0,
'split-text-animation-out' => '',
'split-text-delay-out' => 0,
'class' => ''
);
}
public function upgradeData($data) {
$linkV1 = $data->get('link', '');
if (!empty($linkV1)) {
list($link, $target, $rel) =
array_pad((array)Common::parse($linkV1), 3, '');
$data->un_set('link');
if (is_array($link)) {
$data->set('href', implode('',
$link));
} else {
$data->set('href', $link);
}
$data->set('href-target', $target);
$data->set('href-rel', $rel);
}
}
public function getFilled($slide, $data) {
$data = parent::getFilled($slide, $data);
$data->set('heading',
$slide->fill($data->get('heading', '')));
$data->set('href',
$slide->fill($data->get('href', '#|*|')));
return $data;
}
public function prepareExport($export, $data) {
parent::prepareExport($export, $data);
$export->addVisual($data->get('font'));
$export->addVisual($data->get('style'));
$export->addLightbox($data->get('href'));
}
public function prepareImport($import, $data) {
$data = parent::prepareImport($import, $data);
$data->set('font',
$import->fixSection($data->get('font')));
$data->set('style',
$import->fixSection($data->get('style')));
$data->set('href',
$import->fixLightbox($data->get('href')));
return $data;
}
public function globalDefaultItemFontAndStyle($container) {
$table = new ContainerTable($container, $this->getType(),
$this->getTitle());
$row1 = $table->createRow($this->getType() .
'-1');
new Font($row1, 'item-heading-font', false,
$this->fonts['font']['value'], array(
'mode' => 'hover'
));
new Style($row1, 'item-heading-style', false,
$this->styles['style']['value'], array(
'mode' => 'heading'
));
}
public function renderFields($container) {
$settings = new
Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-heading', n2_('General'));
new Textarea($settings, 'heading', n2_('Text'),
n2_('Heading'), array(
'width' => 314
));
new Select($settings, 'priority', 'Tag',
'div', array(
'options' => array(
'div' => 'div',
'1' => 'H1',
'2' => 'H2',
'3' => 'H3',
'4' => 'H4',
'5' => 'H5',
'6' => 'H6'
)
));
new OnOff($settings, 'fullwidth', n2_('Full
width'), 1);
new OnOff($settings, 'nowrap', n2_('No wrap'),
0, array(
'tipLabel' => n2_('No wrap'),
'tipDescription' => n2_('Prevents the text
from breaking into more lines')
));
$link = new Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-heading-link', n2_('Link'));
new Url($link, 'href', n2_('Link'),
'', array(
'width' => 248,
'relatedFields' => array(
'item_headinghref-target',
'item_headinghref-rel'
)
));
new LinkTarget($link, 'href-target', n2_('Target
window'));
new Text($link, 'href-rel', n2_('Rel'),
'', array(
'style' => 'width:195px;',
'tipLabel' => n2_('Rel'),
'tipDescription' => sprintf(n2_('Enter the
%1$s rel attribute %2$s that represents the relationship between the
current document and the linked document. Multiple rel attributes can be
separated with space. E.g. nofollow noopener noreferrer'), '<a
href="https://www.w3schools.com/TAGS/att_a_rel.asp"
target="_blank">', '</a>')
));
new HiddenFont($settings, 'font', false, '',
array(
'mode' => 'hover'
));
new HiddenStyle($settings, 'style', false, '',
array(
'mode' => 'heading'
));
$splitText = new
Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-heading-split-text', n2_('Text animation'));
new SplitTextAnimation($splitText,
'split-text-animation-in', n2_('Incoming'),
'', array(
'group' => 'in',
'relatedFont' =>
'item_headingfont',
'relatedStyle' =>
'item_headingstyle',
'transformOrigin' =>
'item_headingsplit-text-transform-origin',
'preview' => '<div
class="{styleClassName}"
style="width:{width}px;"><span
class="{fontClassName}">{text}</span></div>',
'linkedRelatedFields' => array(
'linkedFields' => array(
'item_headingsplit-text-animation-out'
),
'relatedFields' => array(
'item_headingsplit-text-backface-visibility',
'item_headingsplit-text-transform-origin'
)
),
'relatedFields' => array(
'item_headingsplit-text-delay-in'
),
'width' => 136
));
new Number($splitText, 'split-text-delay-in',
n2_('Delay'), 0, array(
'unit' => 'ms',
'min' => 0,
'style' => 'width:40px;'
));
new SplitTextAnimation($splitText,
'split-text-animation-out', n2_('Outgoing'),
'', array(
'group' => 'out',
'relatedFont' =>
'item_headingfont',
'relatedStyle' =>
'item_headingstyle',
'transformOrigin' =>
'item_headingsplit-text-transform-origin',
'preview' => '<div
class="{styleClassName}"
style="width:{width}px;"><span
class="{fontClassName}">{text}</span></div>',
'linkedRelatedFields' => array(
'linkedFields' => array(
'item_headingsplit-text-animation-in'
),
'relatedFields' => array(
'item_headingsplit-text-backface-visibility',
'item_headingsplit-text-transform-origin'
)
),
'relatedFields' => array(
'item_headingsplit-text-delay-out'
),
'width' => 136
));
new Number($splitText, 'split-text-delay-out',
n2_('Delay'), 0, array(
'unit' => 'ms',
'min' => 0,
'style' => 'width:40px;'
));
$transformOrigin = new MixedField($splitText,
'split-text-transform-origin', n2_('Transform origin'),
'50|*|50|*|0');
new NumberAutoComplete($transformOrigin,
'split-text-transform-origin-x', false, '', array(
'sublabel' => 'X',
'values' => array(
0,
50,
100
),
'unit' => '%',
'wide' => 4
));
new NumberAutoComplete($transformOrigin,
'split-text-transform-origin-y', false, '', array(
'sublabel' => 'Y',
'values' => array(
0,
50,
100
),
'unit' => '%',
'wide' => 4
));
new Number($transformOrigin,
'split-text-transform-origin-z', false, '', array(
'sublabel' => 'Z',
'unit' => 'px',
'wide' => 4
));
new OnOff($splitText, 'split-text-backface-visibility',
n2_('Backface visibility'), 1);
$advanced = new
Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-heading-advanced', n2_('Advanced'));
new Text($advanced, 'title', n2_('Title'),
'', array(
'style' => 'width:133px;'
));
new Text($advanced, 'class', n2_('CSS Class'),
'', array(
'style' => 'width:133px;'
));
}
}PK9e�[�~b���/Renderable/Item/Heading/ItemHeadingFrontend.phpnu�[���<?php
namespace Nextend\SmartSlider3\Renderable\Item\Heading;
use Nextend\Framework\Misc\Base64;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Renderable\Item\AbstractItemFrontend;
class ItemHeadingFrontend extends AbstractItemFrontend {
public function render() {
return $this->getHtml();
}
private function getHtml() {
$owner = $this->layer->getOwner();
$attributes = array();
$inDelay = max(0,
intval($this->data->get('split-text-delay-in', 0))) / 1000;
$outDelay = max(0,
intval($this->data->get('split-text-delay-out', 0))) /
1000;
$in = $this->data->get('split-text-animation-in',
'');
$out = $this->data->get('split-text-animation-out',
'');
$transformOrigin = implode('% ',
explode('|*|',
$this->data->get('split-text-transform-origin',
'50|*|50|*|0'))) . 'px';
$backfaceVisibility =
$this->data->get('split-text-backface-visibility', 1) ?
'visible' : 'hidden';
if (!empty($in) || !empty($out)) {
if ($this->isEditor && $owner->underEdit) {
$owner->addScript('new
_N2.HeadingItemSplitTextAdmin(this, "' . $this->id .
'", "' . $transformOrigin . '", "'
. $backfaceVisibility . '", "' . $in .
'",' . $inDelay . ', "' . $out .
'", ' . $outDelay . ');');
} else {
if (!empty($in)) {
$in = Base64::decode($in);
} else {
$in = 'false';
}
if (!empty($out)) {
$out = Base64::decode($out);
} else {
$out = 'false';
}
$owner->addScript('new
_N2.FrontendItemHeadingSplitText(this, "' . $this->id .
'", "' . $transformOrigin . '", "'
. $backfaceVisibility . '", ' . $in . ',' .
$inDelay . ', ' . $out . ', ' . $outDelay .
');');
}
}
$font =
$owner->addFont($this->data->get('font'),
'hover');
$style =
$owner->addStyle($this->data->get('style'),
'heading');
$linkAttributes = array(
'class' => 'n2-ow'
);
if ($this->isEditor) {
$linkAttributes['onclick'] = 'return
false;';
}
$title = $this->data->get('title', '');
if (!empty($title)) {
$attributes['title'] = $title;
}
$href = $this->data->get('href', '');
if (!empty($href) && $href != '#') {
$linkAttributes['class'] .= ' ' . $font .
$style;
$font = '';
$style = '';
}
$linkAttributes['style'] = "display:" .
($this->data->get('fullwidth', 1) ? 'block' :
'inline-block') . ";";
$allowedTags =
'<a><span><sub><sup><em><i><var><cite><b><strong><small><bdo>';
$strippedHtml =
strip_tags($owner->fill($this->data->get('heading',
'')), $allowedTags);
return
$this->heading($this->data->get('priority',
'div'), $attributes + array(
"id" => $this->id,
"class" => $font . $style . " " .
$owner->fill($this->data->get('class', '')) .
' n2-ss-item-content n2-ss-text n2-ow',
"style" => "display:" .
($this->data->get('fullwidth', 1) ? 'block' :
'inline-block') . ";" .
($this->data->get('nowrap', 0) ?
'white-space:nowrap;' : '')
), $this->getLink(str_replace("\n",
'<br>', $strippedHtml), $linkAttributes));
}
private function heading($type, $attributes, $content) {
if ($type > 0) {
return Html::tag("h{$type}", $attributes, $content);
}
return Html::tag("div", $attributes, $content);
}
public function renderAdminTemplate() {
return $this->getHtml();
}
public function isAuto() {
return !$this->data->get('fullwidth', 1);
}
}PK9e�[�|��#Renderable/Item/Image/ItemImage.phpnu�[���<?php
namespace Nextend\SmartSlider3\Renderable\Item\Image;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\Hidden;
use Nextend\Framework\Form\Element\MixedField;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Select\LinkTarget;
use Nextend\Framework\Form\Element\Style;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Element\Text\FieldImage;
use Nextend\Framework\Form\Element\Text\Url;
use Nextend\Framework\Form\Fieldset;
use Nextend\Framework\Parser\Common;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\SmartSlider3\Renderable\Item\AbstractItem;
class ItemImage extends AbstractItem {
protected $ordering = 3;
protected $layerProperties = array("desktopportraitwidth"
=> "300");
protected $styles = array(
'style' => array(
'defaultName' => 'item-image-style',
'value' => ''
)
);
protected function isBuiltIn() {
return true;
}
public function getType() {
return 'image';
}
public function getTitle() {
return n2_('Image');
}
public function getIcon() {
return 'ssi_32 ssi_32--image';
}
public function createFrontend($id, $itemData, $layer) {
return new ItemImageFrontend($this, $id, $itemData, $layer);
}
public function globalDefaultItemFontAndStyle($container) {
$table = new ContainerTable($container, $this->getType(),
$this->getTitle());
$row1 = $table->createRow($this->getType() .
'-1');
new Style($row1, 'item-image-style', false,
$this->styles['style']['value'], array(
'mode' => 'box'
));
}
public function getValues() {
return parent::getValues() + array(
'image' =>
'$ss3-frontend$/images/placeholder/image.png',
'alt' => '',
'title' => '',
'href' => '#',
'href-target' => '_self',
'href-rel' => '',
'href-class' => '',
'size' => 'auto|*|auto',
'cssclass' => '',
'image-optimize' => 1
);
}
public function upgradeData($data) {
$linkV1 = $data->get('link', '');
if (!empty($linkV1)) {
list($link, $target, $rel) =
array_pad((array)Common::parse($linkV1), 3, '');
$data->un_set('link');
$data->set('href', $link);
$data->set('href-target', $target);
$data->set('href-rel', $rel);
}
}
public function getFilled($slide, $data) {
$data = parent::getFilled($slide, $data);
$data->set('image',
$slide->fill($data->get('image', '')));
$data->set('alt',
$slide->fill($data->get('alt', '')));
$data->set('title',
$slide->fill($data->get('title', '')));
$data->set('href',
$slide->fill($data->get('href', '#|*|')));
return $data;
}
public function prepareExport($export, $data) {
parent::prepareExport($export, $data);
$export->addImage($data->get('image'));
$export->addVisual($data->get('style'));
$export->addLightbox($data->get('href'));
}
public function prepareImport($import, $data) {
$data = parent::prepareImport($import, $data);
$data->set('image',
$import->fixImage($data->get('image')));
$data->set('style',
$import->fixSection($data->get('style')));
$data->set('href',
$import->fixLightbox($data->get('href')));
return $data;
}
public function prepareSample($data) {
$data->set('image',
ResourceTranslator::toUrl($data->get('image')));
return $data;
}
public function renderFields($container) {
$settings = new
Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-image', n2_('General'));
new FieldImage($settings, 'image',
n2_('Image'), '', array(
'relatedAlt' => 'item_imagealt',
'width' => 220
));
$link = new Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-image-link', n2_('Link'));
new Url($link, 'href', n2_('Link'),
'', array(
'style' => 'width:236px;',
'relatedFields' => array(
'item_imagehref-target',
'item_imagehref-rel'
),
'width' => 248
));
new LinkTarget($link, 'href-target', n2_('Target
window'));
new Text($link, 'href-rel', n2_('Rel'),
'', array(
'style' => 'width:195px;',
'tipLabel' => n2_('Rel'),
'tipDescription' => sprintf(n2_('Enter the
%1$s rel attribute %2$s that represents the relationship between the
current document and the linked document. Multiple rel attributes can be
separated with space. E.g. nofollow noopener noreferrer'), '<a
href="https://www.w3schools.com/TAGS/att_a_rel.asp"
target="_blank">', '</a>')
));
$size = new Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-image-misc', n2_('Size'));
$misc = new MixedField($size, 'size', false,
'auto|*|auto');
new Text($misc, 'size-1', n2_('Width'),
'', array(
'style' => 'width:60px;',
'tipLabel' => n2_('Width'),
'tipDescription' => sprintf(n2_('Fix width
for the %1$s.'), $this->getTitle())
));
new Text($misc, 'size-2', n2_('Height'),
'', array(
'style' => 'width:60px;',
'tipLabel' => n2_('Height'),
'tipDescription' => sprintf(n2_('Fix height
for the %1$s.'), $this->getTitle())
));
$seo = new Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-image-seo', n2_('SEO'));
new Text($seo, 'alt', 'SEO - ' . n2_('Alt
tag'), '', array(
'style' => 'width:133px;'
));
new Text($seo, 'title', 'SEO - ' .
n2_('Title'), '', array(
'style' => 'width:133px;'
));
$optimize = new
Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-image-optimize', n2_('Optimize'));
new OnOff($optimize, 'image-optimize', n2_('Optimize
image'), 1, array(
'tipLabel' => n2_('Optimize
image'),
'tipDescription' => n2_('You can turn off the
Layer image optimization for this image, to resize it for tablet and
mobile.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1833-image-layer#optimize'
));
$dev = new Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-image-dev', n2_('Advanced'));
new Text($dev, 'href-class', n2_('CSS Class') .
' - ' . n2_('Link'), '', array(
'tipLabel' => n2_('CSS Class'),
'tipDescription' => sprintf(n2_('Class on the
%s element.'), '<a>'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1833-image-layer#advanced',
'style' => 'width:133px;'
));
new Text($dev, 'cssclass', n2_('CSS Class') .
' - ' . n2_('Image'), '', array(
'tipLabel' => n2_('CSS Class'),
'tipDescription' => sprintf(n2_('Class on the
%s element.'), '<img>'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1833-image-layer#advanced',
'style' => 'width:133px;'
));
new Hidden\HiddenStyle($settings, 'style', false,
'', array(
'mode' => 'box'
));
}
}PK9e�[�`��+Renderable/Item/Image/ItemImageFrontend.phpnu�[���<?php
namespace Nextend\SmartSlider3\Renderable\Item\Image;
use Nextend\Framework\Parser\Common;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Renderable\Item\AbstractItemFrontend;
class ItemImageFrontend extends AbstractItemFrontend {
public function render() {
return $this->getHtml();
}
public function renderAdminTemplate() {
return $this->getHtml();
}
private function getHtml() {
$owner = $this->layer->getOwner();
$styles = array();
$size =
(array)Common::parse($this->data->get('size',
''));
for ($i = 0; $i < 2; $i++) {
if (is_numeric($size[$i])) {
$size[$i] = $size[$i] . 'px';
}
}
if (!empty($size[0]) && $size[0] != 'auto') {
$styles[] = 'width:' . $size[0];
if (empty($size[1]) || $size[1] == 'auto') {
$styles[] = 'height:auto';
}
}
if (!empty($size[1]) && $size[1] != 'auto') {
if (empty($size[0]) || $size[0] == 'auto') {
$styles[] = 'width:auto';
}
$styles[] = 'height:' . $size[1];
}
$imageUrl = $this->data->get('image',
'');
if (empty($imageUrl)) {
return '';
}
$image = $owner->fill($this->data->get('image',
''));
$imageAttributes = array(
"id" => $this->id,
"alt" =>
htmlspecialchars($owner->fill($this->data->get('alt',
''))),
"class" =>
$owner->fill($this->data->get('cssclass', ''))
);
if (!empty($styles)) {
$imageAttributes['style'] = implode(';',
$styles);
}
$title =
htmlspecialchars($owner->fill($this->data->get('title',
'')));
if (!empty($title)) {
$imageAttributes['title'] = $title;
}
$html = $owner->renderImage($this, $image, $imageAttributes);
$style =
$owner->addStyle($this->data->get('style'),
'heading');
return Html::tag("div", array(
"class" => $style . ' n2-ss-item-image
n2-ss-item-content n2-ow-all'
), $this->getLink($html));
}
}PK9e�[�|�p��Renderable/Item/ItemFactory.phpnu�[���<?php
namespace Nextend\SmartSlider3\Renderable\Item;
use Exception;
use Nextend\Framework\Data\Data;
use Nextend\Framework\Pattern\OrderableTrait;
use Nextend\Framework\Pattern\PluggableTrait;
use Nextend\Framework\Pattern\SingletonTrait;
use Nextend\SmartSlider3\BackupSlider\ExportSlider;
use Nextend\SmartSlider3\BackupSlider\ImportSlider;
use Nextend\SmartSlider3\Renderable\AbstractRenderableOwner;
use Nextend\SmartSlider3\Renderable\Component\ComponentLayer;
use Nextend\SmartSlider3\Renderable\Item\Button\ItemButton;
use Nextend\SmartSlider3\Renderable\Item\Heading\ItemHeading;
use Nextend\SmartSlider3\Renderable\Item\Image\ItemImage;
use Nextend\SmartSlider3\Renderable\Item\Missing\ItemMissing;
use Nextend\SmartSlider3\Renderable\Item\Text\ItemText;
use Nextend\SmartSlider3\Renderable\Item\Vimeo\ItemVimeo;
use Nextend\SmartSlider3\Renderable\Item\YouTube\ItemYouTube;
class ItemFactory {
use SingletonTrait, PluggableTrait;
public static $i = array();
/** @var AbstractItem[][] */
private static $itemGroups = array();
/**
* @var AbstractItem[]
*/
private static $items = array();
/**
* @return AbstractItem[]
*/
public static function getItems() {
return self::$items;
}
/**
* @param $type
*
* @return AbstractItem
*/
public static function getItem($type) {
return self::$items[$type];
}
/**
* @return AbstractItem[][]
*/
public static function getItemGroups() {
return self::$itemGroups;
}
/**
* @param ComponentLayer $layer
* @param array $itemData
*
* @return AbstractItemFrontend
* @throws Exception
*/
public static function create($layer, $itemData) {
if (!isset($itemData['type'])) {
throw new Exception('Error with itemData: ' .
$itemData);
}
$type = $itemData['type'];
if ($type == 'missing') {
$type = $itemData['values']['type'];
}
if (!isset(self::$items[$type])) {
$itemData['values']['type'] = $type;
$type = 'missing';
}
/** @var AbstractItem $factory */
$factory = self::$items[$type];
$elementID = $layer->getOwner()
->getElementID();
if (!isset(self::$i[$elementID])) {
self::$i[$elementID] = 0;
}
self::$i[$elementID]++;
$id = $elementID . 'item' . self::$i[$elementID];
return $factory->createFrontend($id,
$itemData['values'], $layer);
}
/**
* @param AbstractRenderableOwner $slide
* @param array $item
*/
public static function getFilled($slide, &$item) {
$type = $item['type'];
if (isset(self::$items[$type])) {
$item['values'] =
self::$items[$type]->getFilled($slide, new
Data($item['values']))
->toArray();
}
}
/**
* @param ExportSlider $export
* @param $item
*/
public static function prepareExport($export, $item) {
$type = $item['type'];
if (isset(self::$items[$type])) {
self::$items[$type]->prepareExport($export, new
Data($item['values']));
}
}
/**
* @param ImportSlider $import
* @param $item
*
* @return mixed
*/
public static function prepareImport($import, $item) {
$type = $item['type'];
if (isset(self::$items[$type])) {
$item['values'] =
self::$items[$type]->prepareImport($import, new
Data($item['values']))
->toArray();
}
return $item;
}
public static function prepareSample($item) {
$type = $item['type'];
if (isset(self::$items[$type])) {
$item['values'] =
self::$items[$type]->prepareSample(new Data($item['values']))
->toArray();
}
return $item;
}
/**
* @param AbstractItem $item
*/
public function addItem($item) {
self::$items[$item->getType()] = $item;
}
protected function init() {
new ItemHeading($this);
new ItemButton($this);
new ItemImage($this);
new ItemText($this);
new ItemVimeo($this);
new ItemYouTube($this);
$this->makePluggable('RenderableItem');
OrderableTrait::uasort(self::$items);
self::$itemGroups[n2_x('Basic', 'Layer group')]
= array();
self::$itemGroups[n2_x('Special', 'Layer
group')] = array();
self::$itemGroups[n2_x('Media', 'Layer group')]
= array();
self::$itemGroups[n2_x('Advanced', 'Layer
group')] = array();
foreach (self::$items as $type => $item) {
$group = $item->getGroup();
if (!isset(self::$itemGroups[$group])) {
self::$itemGroups[$group] = array();
}
self::$itemGroups[$group][$type] = $item;
}
new ItemMissing($this);
}
}
ItemFactory::getInstance();PK9e�[ܾj;00'Renderable/Item/Missing/ItemMissing.phpnu�[���<?php
namespace Nextend\SmartSlider3\Renderable\Item\Missing;
use Nextend\SmartSlider3\Renderable\Item\AbstractItem;
class ItemMissing extends AbstractItem {
public function createFrontend($id, $itemData, $layer) {
return new ItemMissingFrontend($this, $id, $itemData, $layer);
}
public function getTitle() {
return n2_x('Missing', 'Layer');
}
public function getIcon() {
return '';
}
public function getType() {
return 'missing';
}
public function renderFields($container) {
}
}PK9e�[㯥��/Renderable/Item/Missing/ItemMissingFrontend.phpnu�[���<?php
namespace Nextend\SmartSlider3\Renderable\Item\Missing;
use Nextend\SmartSlider3\Renderable\Item\AbstractItemFrontend;
class ItemMissingFrontend extends AbstractItemFrontend {
public function render() {
return '';
}
protected function renderAdminTemplate() {
return '<div>' . sprintf(n2_('Missing layer
type: %s'), $this->data->get('type')) .
'</div>';
}
}PK9e�[�N�=��!Renderable/Item/Text/ItemText.phpnu�[���<?php
namespace Nextend\SmartSlider3\Renderable\Item\Text;
use Nextend\Framework\Data\Data;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\Font;
use Nextend\Framework\Form\Element\Hidden\HiddenFont;
use Nextend\Framework\Form\Element\Hidden\HiddenStyle;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\RichTextarea;
use Nextend\Framework\Form\Element\Style;
use Nextend\Framework\Form\Fieldset;
use Nextend\SmartSlider3\Renderable\Item\AbstractItem;
class ItemText extends AbstractItem {
protected $ordering = 2;
protected $layerProperties = array(
"desktopportraitleft" => 0,
"desktopportraittop" => 0,
"desktopportraitwidth" => 400,
"desktopportraitalign" => "left",
"desktopportraitvalign" => "top"
);
protected $fonts = array(
'font' => array(
'defaultName' => 'item-text-font',
'value' =>
'{"data":[{"color":"ffffffff","size":"14||px","align":"inherit"},{"color":"1890d7ff"},{"color":"1890d7ff"}]}'
)
);
protected $styles = array(
'style' => array(
'defaultName' => 'item-text-style',
'value' => ''
)
);
protected function isBuiltIn() {
return true;
}
public function getType() {
return 'text';
}
public function getTitle() {
return n2_('Text');
}
public function getIcon() {
return 'ssi_32 ssi_32--text';
}
public function createFrontend($id, $itemData, $layer) {
return new ItemTextFrontend($this, $id, $itemData, $layer);
}
public function globalDefaultItemFontAndStyle($container) {
$table = new ContainerTable($container, $this->getType(),
$this->getTitle());
$row1 = $table->createRow($this->getType() .
'-1');
new Font($row1, 'item-text-font', false,
$this->fonts['font']['value'], array(
'mode' => 'paragraph'
));
new Style($row1, 'item-text-style', false,
$this->styles['style']['value'], array(
'mode' => 'heading'
));
}
public function getValues() {
return parent::getValues() + array(
'content' => 'Lorem ipsum
dolor sit amet, <a href="#">consectetur
adipiscing</a> elit, sed do eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation
ullamco laboris nisi ut aliquip ex ea commodo consequat.',
'content-tablet-enabled' => 0,
'contenttablet' => '',
'content-mobile-enabled' => 0,
'contentmobile' => ''
);
}
/**
* @param Data $data
*/
public function upgradeData($data) {
if (!$data->has('content-tablet-enabled')) {
if ($data->get('contenttablet', '') !=
'') {
$data->set('content-tablet-enabled', 1);
}
}
if (!$data->has('content-mobile-enabled')) {
if ($data->get('contentmobile', '') !=
'') {
$data->set('content-mobile-enabled', 1);
}
}
}
public function getFilled($slide, $data) {
$data = parent::getFilled($slide, $data);
$data->set('content',
$slide->fill($data->get('content', '')));
$data->set('contenttablet',
$slide->fill($data->get('contenttablet', '')));
$data->set('contentmobile',
$slide->fill($data->get('contentmobile', '')));
return $data;
}
public function prepareExport($export, $data) {
parent::prepareExport($export, $data);
$export->addVisual($data->get('font'));
$export->addVisual($data->get('style'));
}
public function prepareImport($import, $data) {
$data = parent::prepareImport($import, $data);
$data->set('font',
$import->fixSection($data->get('font')));
$data->set('style',
$import->fixSection($data->get('style')));
return $data;
}
public function renderFields($container) {
$settings = new
Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-text',
n2_('General'));
new RichTextarea($settings, 'content',
n2_('Text'), '', array(
'fieldStyle' => 'height: 120px; width:
314px;resize: vertical;'
));
new HiddenFont($settings, 'font', false, '',
array(
'mode' => 'paragraph'
));
new HiddenStyle($settings, 'style', false, '',
array(
'mode' => 'heading'
));
new OnOff($settings, 'content-tablet-enabled',
n2_('Tablet'), 0, array(
'relatedFieldsOn' => array(
'item_textcontenttablet'
),
'tipLabel' => n2_('Tablet'),
'tipDescription' => n2_('Custom text for
tablet')
));
new RichTextarea($settings, 'contenttablet',
n2_('Tablet text'), '', array(
'fieldStyle' => 'height: 120px; width:
314px;resize: vertical;'
));
new OnOff($settings, 'content-mobile-enabled',
n2_('Mobile'), 0, array(
'relatedFieldsOn' => array(
'item_textcontentmobile'
),
'tipLabel' => n2_('Mobile'),
'tipDescription' => n2_('Custom text for
mobile')
));
new RichTextarea($settings, 'contentmobile',
n2_('Mobile text'), '', array(
'fieldStyle' => 'height: 120px; width:
314px;resize: vertical;'
));
}
}PK9e�[���m>m>)Renderable/Item/Text/ItemTextFrontend.phpnu�[���<?php
namespace Nextend\SmartSlider3\Renderable\Item\Text;
use Nextend\Framework\Platform\Platform;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Renderable\Item\AbstractItemFrontend;
class ItemTextFrontend extends AbstractItemFrontend {
public function render() {
return $this->getHtml();
}
public function renderAdminTemplate() {
return $this->getHtml();
}
private function getHTML() {
$owner = $this->layer->getOwner();
$font =
$owner->addFont($this->data->get('font'),
'paragraph');
$style =
$owner->addStyle($this->data->get('style'),
'heading');
$tagName = 'p';
if (Platform::needStrongerCSS()) {
$tagName = 'ss-p';
}
$html = '';
$content = str_replace(array(
'<p>',
'</p>'
), array(
'<' . $tagName . ' class="' . $font
. ' ' . $style . ' ">',
'</' . $tagName . '>'
),
$this->wpautop($this->closeTags($owner->fill($this->data->get('content',
'')))));
$class = '';
$hasMobile = false;
if ($this->data->get('content-mobile-enabled')) {
$hasMobile = true;
$html .= Html::tag('div', array(
'data-hide-desktoplandscape' => 1,
'data-hide-desktopportrait' => 1,
'data-hide-tabletlandscape' => 1,
'data-hide-tabletportrait' => 1
), str_replace(array(
'<p>',
'</p>'
), array(
'<' . $tagName . ' class="' .
$font . ' ' . $style . ' ">',
'</' . $tagName . '>'
),
$this->wpautop($this->closeTags($owner->fill($this->data->get('contentmobile',
''))))));
}
$hasTablet = false;
if ($this->data->get('content-tablet-enabled')) {
$hasTablet = true;
$attributes = array(
'class' => $class,
'data-hide-desktoplandscape' => 1,
'data-hide-desktopportrait' => 1,
);
if ($hasMobile) {
$attributes['data-hide-mobilelandscape'] = 1;
$attributes['data-hide-mobileportrait'] = 1;
} else {
$hasMobile = true;
}
$html .= Html::tag('div', $attributes,
str_replace(array(
'<p>',
'</p>'
), array(
'<' . $tagName . ' class="' .
$font . ' ' . $style . '">',
'</' . $tagName . '>'
),
$this->wpautop($this->closeTags($owner->fill($this->data->get('contenttablet',
''))))));
$class = '';
}
$attributes = array(
'class' => $class
);
if ($hasMobile) {
$attributes['data-hide-mobilelandscape'] = 1;
$attributes['data-hide-mobileportrait'] = 1;
}
if ($hasTablet) {
$attributes['data-hide-tabletlandscape'] = 1;
$attributes['data-hide-tabletportrait'] = 1;
}
$html .= Html::tag('div', $attributes, $content);
return Html::tag('div', array(
'class' => 'n2-ss-item-content n2-ss-text
n2-ow-all'
), $html);
}
public function closeTags($html) {
$html = str_replace(array(
'<>',
'</>'
), array(
'',
''
), $html);
// Put all opened tags into an array
preg_match_all('#<([a-z]+)(?: .*)?(?<![/|
])>#iU', $html, $result);
$openedtags = $result[1]; #put all closed tags into an array
preg_match_all('#</([a-z]+)>#iU', $html, $result);
$closedtags = $result[1];
$len_opened = count($openedtags);
# Check if all tags are closed
if (count($closedtags) == $len_opened) {
return $html;
}
$openedtags = array_reverse($openedtags);
# close tags
for ($i = 0; $i < $len_opened; $i++) {
if (!in_array($openedtags[$i], $closedtags)) {
if ($openedtags[$i] != 'br') {
// Ignores <br> tags to avoid unnessary spacing
// at the end of the string
$html .= '</' . $openedtags[$i] .
'>';
}
} else {
unset($closedtags[array_search($openedtags[$i],
$closedtags)]);
}
}
return $html;
}
private function wpautop($pee, $br = true) {
$pre_tags = array();
if (trim($pee) === '') {
return '';
}
// Just to make things a little easier, pad the end.
$pee = $pee . "\n";
/*
* Pre tags shouldn't be touched by autop.
* Replace pre tags with placeholders and bring them back after
autop.
*/
if (strpos($pee, '<pre') !== false) {
$pee_parts = explode('</pre>', $pee);
$last_pee = array_pop($pee_parts);
$pee = '';
$i = 0;
foreach ($pee_parts as $pee_part) {
$start = strpos($pee_part, '<pre');
// Malformed HTML?
if (false === $start) {
$pee .= $pee_part;
continue;
}
$name = "<pre
wp-pre-tag-$i></pre>";
$pre_tags[$name] = substr($pee_part, $start) .
'</pre>';
$pee .= substr($pee_part, 0, $start) . $name;
$i++;
}
$pee .= $last_pee;
}
// Change multiple <br>'s into two line breaks, which
will turn into paragraphs.
$pee =
preg_replace('|<br\s*/?>\s*<br\s*/?>|',
"\n\n", $pee);
$allblocks =
'(?:table|thead|tfoot|caption|col|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|form|map|area|blockquote|address|math|style|p|h[1-6]|hr|fieldset|legend|section|article|aside|hgroup|header|footer|nav|figure|figcaption|details|menu|summary)';
// Add a double line break above block-level opening tags.
$pee = preg_replace('!(<' . $allblocks .
'[\s/>])!', "\n\n$1", $pee);
// Add a double line break below block-level closing tags.
$pee = preg_replace('!(</' . $allblocks .
'>)!', "$1\n\n", $pee);
// Add a double line break after hr tags, which are self closing.
$pee = preg_replace('!(<hr\s*?/?>)!',
"$1\n\n", $pee);
// Standardize newline characters to "\n".
$pee = str_replace(array(
"\r\n",
"\r"
), "\n", $pee);
// Find newlines in all elements and add placeholders.
$pee = self::wp_replace_in_html_tags($pee, array("\n"
=> ' <!-- wpnl --> '));
// Collapse line breaks before and after <option> elements so
they don't get autop'd.
if (strpos($pee, '<option') !== false) {
$pee = preg_replace('|\s*<option|',
'<option', $pee);
$pee = preg_replace('|</option>\s*|',
'</option>', $pee);
}
/*
* Collapse line breaks inside <object> elements, before
<param> and <embed> elements
* so they don't get autop'd.
*/
if (strpos($pee, '</object>') !== false) {
$pee = preg_replace('|(<object[^>]*>)\s*|',
'$1', $pee);
$pee = preg_replace('|\s*</object>|',
'</object>', $pee);
$pee =
preg_replace('%\s*(</?(?:param|embed)[^>]*>)\s*%',
'$1', $pee);
}
/*
* Collapse line breaks inside <audio> and <video>
elements,
* before and after <source> and <track> elements.
*/
if (strpos($pee, '<source') !== false || strpos($pee,
'<track') !== false) {
$pee =
preg_replace('%([<\[](?:audio|video)[^>\]]*[>\]])\s*%',
'$1', $pee);
$pee =
preg_replace('%\s*([<\[]/(?:audio|video)[>\]])%',
'$1', $pee);
$pee =
preg_replace('%\s*(<(?:source|track)[^>]*>)\s*%',
'$1', $pee);
}
// Collapse line breaks before and after <figcaption>
elements.
if (strpos($pee, '<figcaption') !== false) {
$pee =
preg_replace('|\s*(<figcaption[^>]*>)|', '$1',
$pee);
$pee = preg_replace('|</figcaption>\s*|',
'</figcaption>', $pee);
}
// Remove more than two contiguous line breaks.
$pee = preg_replace("/\n\n+/", "\n\n", $pee);
// Split up the contents into an array of strings, separated by
double line breaks.
$pees = preg_split('/\n\s*\n/', $pee, -1,
PREG_SPLIT_NO_EMPTY);
// Reset $pee prior to rebuilding.
$pee = '';
// Rebuild the content as a string, wrapping every bit with a
<p>.
foreach ($pees as $tinkle) {
$pee .= '<p>' . trim($tinkle, "\n") .
"</p>\n";
}
// Under certain strange conditions it could create a P of entirely
whitespace.
$pee = preg_replace('|<p>\s*</p>|',
'', $pee);
// Add a closing <p> inside <div>, <address>, or
<form> tag if missing.
$pee =
preg_replace('!<p>([^<]+)</(div|address|form)>!',
'<p>$1</p></$2>', $pee);
// If an opening or closing block element tag is wrapped in a
<p>, unwrap it.
$pee = preg_replace('!<p>\s*(</?' . $allblocks .
'[^>]*>)\s*</p>!', '$1', $pee);
// In some cases <li> may get wrapped in <p>, fix them.
$pee = preg_replace('|<p>(<li.+?)</p>|',
'$1', $pee);
// If a <blockquote> is wrapped with a <p>, move it
inside the <blockquote>.
$pee =
preg_replace('|<p><blockquote([^>]*)>|i',
'<blockquote$1><p>', $pee);
$pee = str_replace('</blockquote></p>',
'</p></blockquote>', $pee);
// If an opening or closing block element tag is preceded by an
opening <p> tag, remove it.
$pee = preg_replace('!<p>\s*(</?' . $allblocks .
'[^>]*>)!', '$1', $pee);
// If an opening or closing block element tag is followed by a
closing <p> tag, remove it.
$pee = preg_replace('!(</?' . $allblocks .
'[^>]*>)\s*</p>!', '$1', $pee);
// Optionally insert line breaks.
if ($br) {
// Replace newlines that shouldn't be touched with a
placeholder.
$pee =
preg_replace_callback('/<(script|style|svg).*?<\/\\1>/s',
array(
$this,
'_autop_newline_preservation_helper'
), $pee);
// Normalize <br>
$pee = str_replace(array(
'<br>',
'<br/>'
), '<br />', $pee);
// Replace any new line characters that aren't preceded by
a <br /> with a <br />.
$pee = preg_replace('|(?<!<br />)\s*\n|',
"<br />\n", $pee);
// Replace newline placeholders with newlines.
$pee = str_replace('<WPPreserveNewline />',
"\n", $pee);
}
// If a <br /> tag is after an opening or closing block tag,
remove it.
$pee = preg_replace('!(</?' . $allblocks .
'[^>]*>)\s*<br />!', '$1', $pee);
// If a <br /> tag is before a subset of opening or closing
block tags, remove it.
$pee = preg_replace('!<br
/>(\s*</?(?:p|li|div|dl|dd|dt|th|pre|td|ul|ol)[^>]*>)!',
'$1', $pee);
$pee = preg_replace("|\n</p>$|",
'</p>', $pee);
// Replace placeholder <pre> tags with their original
content.
if (!empty($pre_tags)) {
$pee = str_replace(array_keys($pre_tags),
array_values($pre_tags), $pee);
}
// Restore newlines in all elements.
if (false !== strpos($pee, '<!-- wpnl -->')) {
$pee = str_replace(array(
' <!-- wpnl --> ',
'<!-- wpnl -->'
), "\n", $pee);
}
return $pee;
}
/**
* Replace characters or phrases within HTML elements only.
*
* @param string $haystack The text which has to be formatted.
* @param array $replace_pairs In the form array('from'
=> 'to', ...).
*
* @return string The formatted text.
* @since 4.2.3
*
*/
private function wp_replace_in_html_tags($haystack, $replace_pairs) {
// Find all elements.
$textarr = self::wp_html_split($haystack);
$changed = false;
// Optimize when searching for one item.
if (1 === count($replace_pairs)) {
// Extract $needle and $replace.
foreach ($replace_pairs as $needle => $replace) {
}
// Loop through delimiters (elements) only.
for ($i = 1, $c = count($textarr); $i < $c; $i += 2) {
if (false !== strpos($textarr[$i], $needle)) {
$textarr[$i] = str_replace($needle, $replace,
$textarr[$i]);
$changed = true;
}
}
} else {
// Extract all $needles.
$needles = array_keys($replace_pairs);
// Loop through delimiters (elements) only.
for ($i = 1, $c = count($textarr); $i < $c; $i += 2) {
foreach ($needles as $needle) {
if (false !== strpos($textarr[$i], $needle)) {
$textarr[$i] = strtr($textarr[$i], $replace_pairs);
$changed = true;
// After one strtr() break out of the foreach loop
and look at next element.
break;
}
}
}
}
if ($changed) {
$haystack = implode($textarr);
}
return $haystack;
}
/**
* Separate HTML elements and comments from the text.
*
* @param string $input The text which has to be formatted.
*
* @return string[] Array of the formatted text.
* @since 4.2.4
*
*/
private function wp_html_split($input) {
return preg_split(self::get_html_split_regex(), $input, -1,
PREG_SPLIT_DELIM_CAPTURE);
}
/**
* Retrieve the regular expression for an HTML element.
*
* @return string The regular expression
* @since 4.4.0
*
*/
private function get_html_split_regex() {
static $regex;
if (!isset($regex)) {
// phpcs:disable
Squiz.Strings.ConcatenationSpacing.PaddingFound -- don't remove regex
indentation
$comments = '!' // Start of comment,
after the <.
. '(?:' // Unroll the loop: Consume
everything until --> is found.
. '-(?!->)' // Dash not followed by end of
comment.
. '[^\-]*+' // Consume non-dashes.
. ')*+' // Loop possessively.
. '(?:-->)?'; // End of comment. If not
found, match all input.
$cdata = '!\[CDATA\[' // Start of comment, after
the <.
. '[^\]]*+' // Consume non-].
. '(?:' // Unroll the loop: Consume
everything until ]]> is found.
. '](?!]>)' // One ] not followed by end of
comment.
. '[^\]]*+' // Consume non-].
. ')*+' // Loop possessively.
. '(?:]]>)?'; // End of comment. If not
found, match all input.
$escaped = '(?=' // Is the element
escaped?
. '!--' . '|' . '!\[CDATA\['
. ')' . '(?(?=!-)' // If yes, which type?
. $comments . '|' . $cdata . ')';
$regex = '/(' // Capture the entire
match.
. '<' // Find start of element.
. '(?' // Conditional expression
follows.
. $escaped // Find end of escaped element.
. '|' // ...else...
. '[^>]*>?' // Find end of normal element.
. ')' . ')/';
// phpcs:enable
}
return $regex;
}
public function _autop_newline_preservation_helper($matches) {
return str_replace("\n", '<WPPreserveNewline
/>', $matches[0]);
}
}PK9e�[)���&�&#Renderable/Item/Vimeo/ItemVimeo.phpnu�[���<?php
namespace Nextend\SmartSlider3\Renderable\Item\Vimeo;
use Nextend\Framework\Form\Element\Message\Notice;
use Nextend\Framework\Form\Element\Message\Warning;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Element\Text\Color;
use Nextend\Framework\Form\Element\Text\FieldImage;
use Nextend\Framework\Form\Element\Text\Number;
use Nextend\Framework\Form\Fieldset;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\SmartSlider3\Renderable\Item\AbstractItem;
class ItemVimeo extends AbstractItem {
protected $ordering = 20;
protected $layerProperties = array(
"desktopportraitwidth" => 300,
"desktopportraitheight" => 'auto'
);
protected function isBuiltIn() {
return true;
}
public function getType() {
return 'vimeo';
}
public function getTitle() {
return 'Vimeo';
}
public function getIcon() {
return 'ssi_32 ssi_32--vimeo';
}
public function getGroup() {
return n2_x('Media', 'Layer group');
}
/**
* @param Data $data
*/
public function upgradeData($data) {
if (!$data->has('aspect-ratio')) {
$data->set('aspect-ratio', 'fill');
}
}
public function createFrontend($id, $itemData, $layer) {
return new ItemVimeoFrontend($this, $id, $itemData, $layer);
}
public function getValues() {
return parent::getValues() + array(
'vimeourl' => '75251217',
'image' =>
'$ss3-frontend$/images/placeholder/video.png',
'aspect-ratio' => '16:9',
'autoplay' => 0,
'ended' => '',
'title' => 1,
'byline' => 1,
'portrait' => 0,
'color' => '00adef',
'loop' => 0,
'start' => 0,
'playbutton' => 1,
'playbuttonwidth' => 48,
'playbuttonheight' => 48,
'playbuttonimage' => '',
'scroll-pause' =>
'partly-visible',
);
}
public function getFilled($slide, $data) {
$data = parent::getFilled($slide, $data);
$data->set('image',
$slide->fill($data->get('image', '')));
$data->set('vimeourl',
$slide->fill($data->get('vimeourl', '')));
return $data;
}
public function prepareExport($export, $data) {
parent::prepareExport($export, $data);
$export->addImage($data->get('image'));
}
public function prepareImport($import, $data) {
$data = parent::prepareImport($import, $data);
$data->set('image',
$import->fixImage($data->get('image')));
return $data;
}
public function prepareSample($data) {
$data->set('image',
ResourceTranslator::toUrl($data->get('image')));
return $data;
}
public function renderFields($container) {
$settings = new
Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-vimeo', n2_('General'));
new Text($settings, 'vimeourl', n2_('Vimeo url or
Video ID'), '', array(
'style' => 'width:302px;'
));
new FieldImage($settings, 'image', n2_('Cover
image'), '', array(
'width' => 220
));
new Select($settings, 'aspect-ratio', n2_('Aspect
ratio'), '16:9', array(
'options' => array(
'16:9' => '16:9',
'16:10' => '16:10',
'4:3' => '4:3',
'custom' => n2_('Custom'),
'fill' => n2_('Fill layer height')
),
'relatedValueFields' => array(
array(
'values' => array(
'custom'
),
'field' => array(
'item_vimeoaspect-ratio-width',
'item_vimeoaspect-ratio-height'
)
),
array(
'values' => array(
'fill'
),
'field' => array(
'item_vimeoaspect-ratio-notice'
)
)
)
));
new Text\Number($settings, 'aspect-ratio-width',
n2_('Width'), '16', array(
'wide' => 4,
'min' => 1
));
new Text\Number($settings, 'aspect-ratio-height',
n2_('Height'), '9', array(
'wide' => 4,
'min' => 1
));
new Notice($settings, 'aspect-ratio-notice',
n2_('Fill layer height'), n2_('Set on Style tab.'));
$misc = new Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-vimeo-misc', n2_('Video settings'));
new Warning($misc, 'slide-background-notice',
sprintf(n2_('Video autoplaying has a lot of limitations made by
browsers. %1$sLearn about them.%2$s'), '<a
href="https://smartslider.helpscoutdocs.com/article/1919-video-autoplay-handling"
target="_blank">', '</a>'));
new OnOff($misc, 'autoplay', n2_('Autoplay'),
0, array(
'relatedFieldsOn' => array(
'item_vimeoautoplay-notice'
)
));
new Select($misc, 'ended', n2_('When ended'),
'', array(
'options' => array(
'' => n2_('Do nothing'),
'next' => n2_('Go to next slide')
)
));
new Number($misc, 'start', n2_('Start time'),
0, array(
'min' => 0,
'unit' => 'sec',
'wide' => 5
));
new Select($misc, 'volume', n2_('Volume'), 1,
array(
'options' => array(
'0' => n2_('Mute'),
'0.25' => '25%',
'0.5' => '50%',
'0.75' => '75%',
'1' => '100%',
'-1' => n2_('Default')
)
));
new Select($misc, 'scroll-pause', n2_('Pause on
scroll'), 'partly-visible', array(
'options' => array(
'' => n2_('Never'),
'partly-visible' => n2_('When partly
visible'),
'not-visible' => n2_('When not
visible'),
),
'tipLabel' => n2_('Pause on
scroll'),
'tipDescription' => n2_('You can pause the
video when the visitor scrolls away from the slider')
));
new OnOff($misc, 'loop', n2_x('Loop',
'Video/Audio play'), 0, array(
'relatedFieldsOff' => array(
'item_vimeoended'
)
));
new OnOff($misc, 'privateurl', n2_('Private
video'), 0, array(
'tipLabel' => n2_('Private
video'),
'tipDescription' => n2_('Turn it on to
remove the admin warning that your video is not accessible.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1847-vimeo-layer#private-video'
));
new OnOff($misc, 'reset', n2_('Restart on slide
change'), 0, array(
'tipLabel' => n2_('Restart on slide
change'),
'tipDescription' => n2_('Starts the video
from the beginning when the slide is viewed again.')
));
$display = new Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-youtube-display', n2_('Display'));
new Color($display, 'color', n2_('Color'), 0,
array(
'tipLabel' => n2_('Color'),
'tipDescription' => n2_('Only works on
videos of Vimeo Pro users.')
));
new OnOff($display, 'background', n2_('Remove
controls'), 0, array(
'tipLabel' => n2_('Remove
controls'),
'tipDescription' => n2_('Removes the
controls of the video, but it only works on videos of Vimeo Pro
users.')
));
new OnOff($display, 'title', n2_('Title'), 1,
array(
'tipLabel' => n2_('Title'),
'tipDescription' => n2_('Hides the
title of the video, but only if video owner allows it.')
));
new OnOff($display, 'byline', n2_('Users
byline'), 1, array(
'tipLabel' => n2_('Users
byline'),
'tipDescription' => n2_('Hides the
user\'s byline of the video, but only if video owner allows it.')
));
new OnOff($display, 'portrait',
n2_('Portrait'), 1, array(
'tipLabel' =>
n2_('Portrait'),
'tipDescription' => n2_('Hides the
profile image of the author, but only if video owner allows it. ')
));
new Select($display, 'quality', n2_('Quality'),
'-1', array(
'options' => array(
'270p' => '270p',
'360p' => '360p',
'720p' => '720p',
'1080p' => '1080p',
'-1' => n2_('Default')
),
'tipLabel' => n2_('Quality'),
'tipDescription' => n2_('Only works on
videos of Vimeo Pro users.')
));
$playButton = new
Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-vimeo-playbutton', n2_('Play button'));
new OnOff($playButton, 'playbutton', n2_('Play
button'), 1);
new Number($playButton, 'playbuttonwidth',
n2_('Width'), 48, array(
'unit' => 'px',
'wide' => 4
));
new Number($playButton, 'playbuttonheight',
n2_('Height'), 48, array(
'unit' => 'px',
'wide' => 4
));
new FieldImage($playButton, 'playbuttonimage',
n2_('Image'), '', array(
'width' => 220
));
}
}PK9e�[��5���+Renderable/Item/Vimeo/ItemVimeoFrontend.phpnu�[���<?php
namespace Nextend\SmartSlider3\Renderable\Item\Vimeo;
use Nextend\Framework\FastImageSize\FastImageSize;
use Nextend\Framework\Image\Image;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Renderable\Item\AbstractItemFrontend;
use Nextend\SmartSlider3\Settings;
class ItemVimeoFrontend extends AbstractItemFrontend {
public function render() {
$owner = $this->layer->getOwner();
$url =
$owner->fill($this->data->get("vimeourl"));
if
(preg_match('/https?:\/\/(?:www\.|player\.)?vimeo.com\/(?:channels\/(?:\w+\/)?|groups\/([^\/]*)\/videos\/|album\/(\d+)\/video\/|video\/|)(\d+)(?:$|\/|\?)/',
$url, $matches)) {
$videoID = $matches[3];
} else {
$videoID = preg_replace('/\D/', '', $url);
}
$this->data->set("vimeocode", $videoID);
$hasImage = 0;
$coverImageUrl = $this->data->get('image');
$coverImage = '';
if (!empty($coverImageUrl)) {
$coverImageElement = $owner->renderImage($this,
$coverImageUrl, array(
'class' => 'n2_ss_video_cover',
'alt' => n2_('Play')
), array(
'class' => 'n2-ow-all'
));
$hasImage = 1;
$playImage = '';
if ($this->data->get('playbutton', 1) == 1) {
$playWidth =
intval($this->data->get('playbuttonwidth',
'48'));
$playHeight =
intval($this->data->get('playbuttonheight',
'48'));
if ($playWidth > 0 && $playHeight > 0) {
$attributes = Html::addExcludeLazyLoadAttributes(array(
'style' => '',
'class' =>
'n2_ss_video_play_btn'
));
if ($playWidth != 48) {
$attributes['style'] .=
'width:' . $playWidth . 'px;';
}
if ($playHeight != 48) {
$attributes['style'] .=
'height:' . $playHeight . 'px;';
}
$playButtonImage =
$this->data->get('playbuttonimage', '');
if (!empty($playButtonImage)) {
$image =
$this->data->get('playbuttonimage', '');
FastImageSize::initAttributes($image, $attributes);
$src = ResourceTranslator::toUrl($image);
} else {
$image =
'$ss3-frontend$/images/play.svg';
FastImageSize::initAttributes($image, $attributes);
$src = Image::SVGToBase64($image);
}
$playImage = Html::image($src, 'Play',
$attributes);
}
}
$coverImage = Html::tag('div', array(
'class' =>
'n2_ss_video_player__cover',
'data-force-pointer' => ''
), $coverImageElement . $playImage);
}
$this->data->set('privacy-enhanced',
intval(Settings::get('youtube-privacy-enhanced', 0)));
$owner->addScript('new _N2.FrontendItemVimeo(this,
"' . $this->id . '", "' .
$owner->getElementID() . '", ' .
$this->data->toJSON() . ', ' . $hasImage . ', ' .
$owner->fill($this->data->get('start', '0')) .
');');
$aspectRatio = $this->data->get('aspect-ratio',
'16:9');
$style = '';
if ($aspectRatio == 'custom') {
$style = 'style="padding-top:' .
($this->data->get('aspect-ratio-height', '9') /
$this->data->get('aspect-ratio-width', '16') *
100) . '%"';
}
return Html::tag('div', array(
'id' => $this->id,
'class' => 'n2_ss_video_player
n2-ss-item-content n2-ow-all',
'data-aspect-ratio' => $aspectRatio
), '<div class="n2_ss_video_player__placeholder"
' . $style . '></div>' . $coverImage);
}
public function renderAdminTemplate() {
$aspectRatio = $this->data->get('aspect-ratio',
'16:9');
$style = '';
if ($aspectRatio == 'custom') {
$style = 'style="padding-top:' .
($this->data->get('aspect-ratio-height', '9') /
$this->data->get('aspect-ratio-width', '16') *
100) . '%"';
}
$playButtonImage =
$this->data->get('playbuttonimage', '');
if (!empty($playButtonImage)) {
$playButtonImage = ResourceTranslator::toUrl($playButtonImage);
} else {
$playButtonImage =
Image::SVGToBase64('$ss3-frontend$/images/play.svg');
}
$playButtonStyle = '';
$playButtonWidth =
intval($this->data->get('playbuttonwidth',
'48'));
$playButtonHeight =
intval($this->data->get('playbuttonheight',
'48'));
if ($playButtonWidth > 0) {
$playButtonStyle .= 'width:' . $playButtonWidth .
'px;';
}
if ($playButtonHeight > 0) {
$playButtonStyle .= 'height:' . $playButtonHeight .
'px;';
}
$playButton = Html::image($playButtonImage, n2_('Play'),
Html::addExcludeLazyLoadAttributes(array(
'class' => 'n2_ss_video_play_btn',
'style' => $playButtonStyle
)));
return Html::tag('div', array(
"class" => 'n2_ss_video_player
n2-ow-all',
'data-aspect-ratio' => $aspectRatio,
"style" => 'background:
URL(' .
ResourceTranslator::toUrl($this->data->getIfEmpty('image',
'$ss3-frontend$/images/placeholder/video.png')) . ')
no-repeat 50% 50%; background-size: cover;'
), '<div class="n2_ss_video_player__placeholder"
' . $style . '></div>' . '<div
class="n2_ss_video_player__cover">' . $playButton .
'</div>');
}
}PK9e�[�ɺ�%%'Renderable/Item/YouTube/ItemYouTube.phpnu�[���<?php
namespace Nextend\SmartSlider3\Renderable\Item\YouTube;
use Nextend\Framework\Data\Data;
use Nextend\Framework\Form\Element\Message\Notice;
use Nextend\Framework\Form\Element\Message\Warning;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Element\Text\FieldImage;
use Nextend\Framework\Form\Element\Text\Number;
use Nextend\Framework\Form\Fieldset;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\SmartSlider3\Renderable\Item\AbstractItem;
class ItemYouTube extends AbstractItem {
protected $ordering = 20;
protected $layerProperties = array(
"desktopportraitwidth" => 300,
"desktopportraitheight" => 'auto'
);
protected function isBuiltIn() {
return true;
}
public function getType() {
return 'youtube';
}
public function getTitle() {
return 'YouTube';
}
public function getIcon() {
return 'ssi_32 ssi_32--youtube';
}
public function getGroup() {
return n2_x('Media', 'Layer group');
}
/**
* @param Data $data
*/
public function upgradeData($data) {
if (!$data->has('aspect-ratio')) {
$data->set('aspect-ratio', 'fill');
}
}
public function createFrontend($id, $itemData, $layer) {
return new ItemYouTubeFrontend($this, $id, $itemData, $layer);
}
public function getValues() {
return parent::getValues() + array(
'code' => 'qesNtYIBDfs',
'aspect-ratio' => '16:9',
'youtubeurl' =>
'https://www.youtube.com/watch?v=3PPtkRU7D74',
'image' =>
'$ss3-frontend$/images/placeholder/video.png',
'autoplay' => 0,
'ended' => '',
'controls' => 1,
'defaultimage' => 'hqdefault',
'related' => '1',
'center' => 0,
'loop' => 0,
'modestbranding' => 1,
'reset' => 0,
'start' => '0',
'playbutton' => 1,
'playbuttonwidth' => 48,
'playbuttonheight' => 48,
'playbuttonimage' => '',
'scroll-pause' =>
'partly-visible',
);
}
public function getFilled($slide, $data) {
$data = parent::getFilled($slide, $data);
$data->set('image',
$slide->fill($data->get('image', '')));
$data->set('youtubeurl',
$slide->fill($data->get('youtubeurl', '')));
return $data;
}
public function prepareExport($export, $data) {
parent::prepareExport($export, $data);
$export->addImage($data->get('image'));
}
public function prepareImport($import, $data) {
$data = parent::prepareImport($import, $data);
$data->set('image',
$import->fixImage($data->get('image')));
return $data;
}
public function prepareSample($data) {
$data->set('image',
ResourceTranslator::toUrl($data->get('image')));
return $data;
}
public function renderFields($container) {
$settings = new
Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-youtube', n2_('General'));
new Text($settings, 'youtubeurl', n2_('YouTube URL
or Video ID'), '', array(
'style' => 'width:302px;'
));
new FieldImage($settings, 'image', n2_('Cover
image'), '', array(
'width' => 220
));
new Select($settings, 'aspect-ratio', n2_('Aspect
ratio'), '16:9', array(
'options' => array(
'16:9' => '16:9',
'16:10' => '16:10',
'4:3' => '4:3',
'custom' => n2_('Custom'),
'fill' => n2_('Fill layer height')
),
'relatedValueFields' => array(
array(
'values' => array(
'custom'
),
'field' => array(
'item_youtubeaspect-ratio-width',
'item_youtubeaspect-ratio-height'
)
),
array(
'values' => array(
'fill'
),
'field' => array(
'item_youtubeaspect-ratio-notice'
)
)
)
));
new Text\Number($settings, 'aspect-ratio-width',
n2_('Width'), '16', array(
'wide' => 4,
'min' => 1
));
new Text\Number($settings, 'aspect-ratio-height',
n2_('Height'), '9', array(
'wide' => 4,
'min' => 1
));
new Notice($settings, 'aspect-ratio-notice',
n2_('Fill layer height'), n2_('Set on Style tab.'));
$misc = new Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-youtube-misc', n2_('Video settings'));
new Warning($misc, 'slide-background-notice',
sprintf(n2_('Video autoplaying has a lot of limitations made by
browsers. %1$sLearn about them.%2$s'), '<a
href="https://smartslider.helpscoutdocs.com/article/1919-video-autoplay-handling"
target="_blank">', '</a>'));
new OnOff($misc, 'autoplay', n2_('Autoplay'),
0, array(
'relatedFieldsOn' => array(
'item_youtubeautoplay-notice'
)
));
new Select($misc, 'ended', n2_('When ended'),
'', array(
'options' => array(
'' => n2_('Do nothing'),
'next' => n2_('Go to next slide')
)
));
new Number($misc, 'start', n2_('Start time'),
0, array(
'min' => 0,
'unit' => 'sec',
'wide' => 5
));
new Number($misc, 'end', n2_('End time'), 0,
array(
'min' => 0,
'unit' => 'sec',
'wide' => 5
));
new Select($misc, 'volume', n2_('Volume'), 1,
array(
'options' => array(
'0' => n2_('Mute'),
'0.25' => '25%',
'0.5' => '50%',
'0.75' => '75%',
'1' => '100%',
'-1' => n2_('Default')
)
));
new Select($misc, 'scroll-pause', n2_('Pause on
scroll'), 'partly-visible', array(
'options' => array(
'' => n2_('Never'),
'partly-visible' => n2_('When partly
visible'),
'not-visible' => n2_('When not
visible'),
),
'tipLabel' => n2_('Pause on
scroll'),
'tipDescription' => n2_('You can pause the
video when the visitor scrolls away from the slider')
));
new OnOff($misc, 'loop', n2_x('Loop',
'Video/Audio play'), 0, array(
'relatedFieldsOff' => array(
'item_youtubeended'
)
));
new OnOff($misc, 'reset', n2_('Restart on slide
change'), 0, array(
'tipLabel' => n2_('Restart on slide
change'),
'tipDescription' => n2_('Starts the video
from the beginning when the slide is viewed again.')
));
$display = new Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-youtube-display', n2_('Display'));
new OnOff($display, 'controls',
n2_('Controls'), 1);
new OnOff($display, 'modestbranding', n2_('Hide
YouTube logo'), 1);
new OnOff($display, 'center', n2_('Centered'),
0, array(
'tipLabel' => n2_('Centered'),
'tipDescription' => n2_('Scales up and crops
the video to cover the whole layer.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1846-youtube-layer#centered'
));
new Select($display, 'related', n2_('Show related
videos'), 1, array(
'options' => array(
'0' => n2_('Anywhere'),
'1' => n2_('Same channel')
),
'tipLabel' => n2_('Show related
videos'),
'tipDescription' => n2_('YouTube no longer
allows hiding the related videos at the end of the video. This setting
defines whether the videos should come from the same channel as the video
that was just played or from any other channel.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1846-youtube-layer#show-related-videos',
));
$playButton = new
Fieldset\LayerWindow\FieldsetLayerWindow($container,
'item-youtube-playbutton', n2_('Play button'));
new OnOff($playButton, 'playbutton', n2_('Play
button'), 1, array(
'relatedFieldsOn' => array(
'item_youtubeplaybuttonwidth',
'item_youtubeplaybuttonheight',
'item_youtubeplaybuttonimage',
)
));
new Number($playButton, 'playbuttonwidth',
n2_('Width'), 48, array(
'unit' => 'px',
'wide' => 4
));
new Number($playButton, 'playbuttonheight',
n2_('Height'), 48, array(
'unit' => 'px',
'wide' => 4
));
new FieldImage($playButton, 'playbuttonimage',
n2_('Image'), '', array(
'width' => 220
));
}
}PK9e�[5�K=22/Renderable/Item/YouTube/ItemYouTubeFrontend.phpnu�[���<?php
namespace Nextend\SmartSlider3\Renderable\Item\YouTube;
use Nextend\Framework\Data\Data;
use Nextend\Framework\FastImageSize\FastImageSize;
use Nextend\Framework\Image\Image;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Renderable\Item\AbstractItemFrontend;
use Nextend\SmartSlider3\Settings;
class ItemYouTubeFrontend extends AbstractItemFrontend {
public function render() {
$owner = $this->layer->getOwner();
/**
* @var Data
*/
$this->data->fillDefault(array(
'image' => '',
'aspect-ratio' => '16:9',
'start' => 0,
'volume' => -1,
'autoplay' => 0,
'ended' => '',
'controls' => 1,
'center' => 0,
'loop' => 0,
'reset' => 0,
'related' => 1,
));
$aspectRatio = $this->data->get('aspect-ratio',
'16:9');
if ($aspectRatio != 'fill') {
$this->data->set('center', 0);
}
$rawYTUrl =
$owner->fill($this->data->get('youtubeurl',
''));
$url_parts = parse_url($rawYTUrl);
if (!empty($url_parts['query'])) {
parse_str($url_parts['query'], $query);
if (isset($query['v'])) {
unset($query['v']);
}
$this->data->set("query", $query);
}
$youTubeUrl = $this->parseYoutubeUrl($rawYTUrl);
$start = $owner->fill($this->data->get('start',
''));
$this->data->set("youtubecode", $youTubeUrl);
$this->data->set("start", $start);
$end = $owner->fill($this->data->get('end',
''));
$this->data->set("youtubecode", $youTubeUrl);
$this->data->set("end", $end);
$hasImage = 0;
$coverImageUrl =
$owner->fill($this->data->get('image'));
$coverImage = '';
if (!empty($coverImageUrl)) {
$coverImageElement = $owner->renderImage($this,
$coverImageUrl, array(
'class' => 'n2_ss_video_cover',
'alt' => n2_('Play')
), array(
'class' => 'n2-ow-all'
));
$hasImage = 1;
$playImage = '';
if ($this->data->get('playbutton', 1) == 1) {
$playWidth =
intval($this->data->get('playbuttonwidth',
'48'));
$playHeight =
intval($this->data->get('playbuttonheight',
'48'));
if ($playWidth > 0 && $playHeight > 0) {
$attributes = Html::addExcludeLazyLoadAttributes(array(
'style' => '',
'class' =>
'n2_ss_video_play_btn'
));
if ($playWidth != 48) {
$attributes['style'] .=
'width:' . $playWidth . 'px;';
}
if ($playHeight != 48) {
$attributes['style'] .=
'height:' . $playHeight . 'px;';
}
$playButtonImage =
$this->data->get('playbuttonimage', '');
if (!empty($playButtonImage)) {
$image =
$this->data->get('playbuttonimage', '');
FastImageSize::initAttributes($image, $attributes);
$src = ResourceTranslator::toUrl($image);
} else {
$image =
'$ss3-frontend$/images/play.svg';
FastImageSize::initAttributes($image, $attributes);
$src = Image::SVGToBase64($image);
}
$playImage = Html::image($src, 'Play',
$attributes);
}
}
$coverImage = Html::tag('div', array(
'class' =>
'n2_ss_video_player__cover',
'data-force-pointer' => ''
), $coverImageElement . $playImage);
}
$this->data->set('privacy-enhanced',
intval(Settings::get('youtube-privacy-enhanced', 0)));
$owner->addScript('new _N2.FrontendItemYouTube(this,
"' . $this->id . '", ' .
$this->data->toJSON() . ', ' . $hasImage . ');');
$style = '';
if ($aspectRatio == 'custom') {
$style = 'style="padding-top:' .
($this->data->get('aspect-ratio-height', '9') /
$this->data->get('aspect-ratio-width', '16') *
100) . '%"';
}
return Html::tag('div', array(
'id' => $this->id,
'class' => 'n2_ss_video_player
n2-ss-item-content n2-ow-all',
'data-aspect-ratio' => $aspectRatio
), '<div class="n2_ss_video_player__placeholder"
' . $style . '></div>' . Html::tag('div',
array(
'id' => $this->id . '-frame',
), '') . $coverImage);
}
public function renderAdminTemplate() {
$aspectRatio = $this->data->get('aspect-ratio',
'16:9');
$style = '';
if ($aspectRatio == 'custom') {
$style = 'style="padding-top:' .
($this->data->get('aspect-ratio-height', '9') /
$this->data->get('aspect-ratio-width', '16') *
100) . '%"';
}
$image = $this->layer->getOwner()
->fill($this->data->get('image'));
$this->data->set('image', $image);
$playButtonImage =
$this->data->get('playbuttonimage', '');
if (!empty($playButtonImage)) {
$playButtonImage = ResourceTranslator::toUrl($playButtonImage);
} else {
$playButtonImage =
Image::SVGToBase64('$ss3-frontend$/images/play.svg');
}
$playButtonStyle = '';
$playButtonWidth =
intval($this->data->get('playbuttonwidth',
'48'));
$playButtonHeight =
intval($this->data->get('playbuttonheight',
'48'));
if ($playButtonWidth > 0) {
$playButtonStyle .= 'width:' . $playButtonWidth .
'px;';
}
if ($playButtonHeight > 0) {
$playButtonStyle .= 'height:' . $playButtonWidth .
'px;';
}
$playButton = Html::image($playButtonImage, n2_('Play'),
Html::addExcludeLazyLoadAttributes(array(
'class' => 'n2_ss_video_play_btn',
'style' => $playButtonStyle
)));
return Html::tag('div', array(
'class' => 'n2_ss_video_player
n2-ow-all',
'data-aspect-ratio' => $aspectRatio,
"style" => 'background:
URL(' .
ResourceTranslator::toUrl($this->data->getIfEmpty('image',
'$ss3-frontend$/images/placeholder/video.png')) . ')
no-repeat 50% 50%; background-size: cover;'
), '<div class="n2_ss_video_player__placeholder"
' . $style . '></div>' .
($this->data->get('playbutton', 1) ? '<div
class="n2_ss_video_player__cover">' . $playButton .
'</div>' : ''));
}
private function parseYoutubeUrl($youTubeUrl) {
preg_match('/^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#\&\?]*).*/',
$youTubeUrl, $matches);
if ($matches && isset($matches[7]) &&
strlen($matches[7]) == 11) {
return $matches[7];
}
return $youTubeUrl;
}
}PK9e�[{�t��*Renderable/Placement/AbstractPlacement.phpnu�[���<?php
namespace Nextend\SmartSlider3\Renderable\Placement;
use Nextend\SmartSlider3\Renderable\Component\AbstractComponent;
abstract class AbstractPlacement {
/** @var AbstractComponent */
protected $component;
protected $index = 1;
protected $style = '';
protected $attributes = '';
/**
*
* @param AbstractComponent $component
* @param int $index
*/
public function __construct($component, $index) {
$this->component = $component;
$this->index = $index;
}
/**
* @param array $attributes
*/
public function attributes(&$attributes) {
}
/**
* @param array $attributes
*/
public function adminAttributes(&$attributes) {
}
}PK9e�[��nO��*Renderable/Placement/PlacementAbsolute.phpnu�[���<?php
namespace Nextend\SmartSlider3\Renderable\Placement;
class PlacementAbsolute extends AbstractPlacement {
public function attributes(&$attributes) {
$data = $this->component->data;
$attributes['data-pm'] = 'absolute';
$this->component->createProperty('responsiveposition', 1);
$this->component->createDeviceProperty('left', 0);
$this->component->createDeviceProperty('top', 0);
$this->component->createProperty('responsivesize',
1);
$this->component->createDeviceProperty('width');
$this->component->createDeviceProperty('height');
$this->component->createDeviceProperty('align');
$this->component->createDeviceProperty('valign');
// Chain
$attributes['data-parentid'] =
$data->get('parentid');
$this->component->createDeviceProperty('parentalign');
$this->component->createDeviceProperty('parentvalign');
$isLegacyFontScale = $this->component->getOwner()
->getSlider()
->isLegacyFontScale();
if ($isLegacyFontScale) {
$adaptiveFont = intval($data->get('adaptivefont',
1));
if ($adaptiveFont === 0) {
$attributes['data-adaptivefont'] = 0;
}
}
}
public function adminAttributes(&$attributes) {
}
}PK9e�[��Q0��)Renderable/Placement/PlacementDefault.phpnu�[���<?php
namespace Nextend\SmartSlider3\Renderable\Placement;
class PlacementDefault extends AbstractPlacement {
public function attributes(&$attributes) {
$attributes['data-pm'] = 'default';
}
}PK9e�[����(Renderable/Placement/PlacementNormal.phpnu�[���<?php
namespace Nextend\SmartSlider3\Renderable\Placement;
use Nextend\SmartSlider3\Renderable\Component\AbstractComponent;
class PlacementNormal extends AbstractPlacement {
public function attributes(&$attributes) {
$data = $this->component->data;
$attributes['data-pm'] = 'normal';
$devices =
$this->component->getOwner()->getAvailableDevices();
$desktopPortraitSelfAlign =
$data->get('desktopportraitselfalign', 'inherit');
$desktopPortraitMaxWidth =
intval($data->get('desktopportraitmaxwidth', 0));
$desktopPortraitHeight =
$data->get('desktopportraitheight', 0);
$desktopPortraitMargin =
$data->get('desktopportraitmargin');
if (!empty($desktopPortraitMargin)) {
$desktopPortraitMargin =
$this->component->spacingToPxValue($desktopPortraitMargin);
} else {
$desktopPortraitMargin = array(
0,
0,
0,
0
);
}
foreach ($devices as $device) {
$margin = $data->get($device . 'margin');
if (!empty($margin)) {
$marginValues =
$this->component->spacingToPxValue($margin);
$cssText = array();
if (($marginValues[0] == 0 &&
$desktopPortraitMargin[0] != 0) || $marginValues[0] != 0) {
$cssText[] = '--margin-top:' .
$marginValues[0] . 'px';
}
if (($marginValues[1] == 0 &&
$desktopPortraitMargin[1] != 0) || $marginValues[1] != 0) {
$cssText[] = '--margin-right:' .
$marginValues[1] . 'px';
}
if (($marginValues[2] == 0 &&
$desktopPortraitMargin[2] != 0) || $marginValues[2] != 0) {
$cssText[] = '--margin-bottom:' .
$marginValues[2] . 'px';
}
if (($marginValues[3] == 0 &&
$desktopPortraitMargin[3] != 0) || $marginValues[3] != 0) {
$cssText[] = '--margin-left:' .
$marginValues[3] . 'px';
}
$this->component->style->add($device,
'', implode(';', $cssText));
}
$height = $data->get($device . 'height');
if ($height === 0 || !empty($height)) {
if ($height == 0) {
if ($desktopPortraitHeight > 0) {
$this->component->style->add($device,
'', 'height:auto');
}
} else {
$this->component->style->add($device,
'', 'height:' . $height . 'px');
}
}
$maxWidth = intval($data->get($device .
'maxwidth', -1));
if ($maxWidth > 0) {
$this->component->style->add($device,
'', 'max-width:' . $maxWidth . 'px');
} else if ($maxWidth === 0 && $device !=
'desktopportrait' && $maxWidth !=
$desktopPortraitMaxWidth) {
$this->component->style->add($device,
'', 'max-width:none');
}
$selfAlign = $data->get($device . 'selfalign',
'');
if ($device == 'desktopportrait') {
if ($desktopPortraitSelfAlign != 'inherit') {
$this->component->style->add($device,
'', AbstractComponent::selfAlignToStyle($selfAlign));
}
} else if ($desktopPortraitSelfAlign != $selfAlign) {
$this->component->style->add($device,
'', AbstractComponent::selfAlignToStyle($selfAlign));
}
}
}
public function adminAttributes(&$attributes) {
$this->component->createDeviceProperty('maxwidth',
0);
$this->component->createDeviceProperty('margin',
'0|*|0|*|0|*|0');
$this->component->createDeviceProperty('height',
0);
$this->component->createDeviceProperty('selfalign',
'inherit');
}
}PK9e�[nk}�ttSettings.phpnu�[���<?php
namespace Nextend\SmartSlider3;
use Nextend\Framework\Model\StorageSectionManager;
class Settings {
static $settings = null;
private static $_type = "settings";
static function getAll() {
if (self::$settings === null) {
self::$settings =
json_decode(StorageSectionManager::getStorage('smartslider')
->get(self::$_type), true);
if (self::$settings === null || !is_array(self::$settings))
self::$settings = array();
}
return self::$settings;
}
static function get($key, $default = null) {
if (self::$settings === null) self::getAll();
if (!array_key_exists($key, self::$settings)) return $default;
return self::$settings[$key];
}
static function set($key, $value) {
self::getAll();
self::$settings[$key] = $value;
self::store(self::$_type, json_encode(self::$settings));
}
static function store($key, $value) {
StorageSectionManager::getStorage('smartslider')
->set($key, '', $value);
}
}PK9e�[`VK
)SlideBuilder/AbstractBuilderComponent.phpnu�[���<?php
namespace Nextend\SmartSlider3\SlideBuilder;
abstract class AbstractBuilderComponent {
protected $defaultData = array();
protected $data = array();
public function set($keyOrData, $value = null) {
if (is_array($keyOrData)) {
foreach ($keyOrData AS $key => $value) {
$this->setSingle($key, $value);
}
} else {
$this->setSingle($keyOrData, $value);
}
return $this;
}
private function setSingle($key, $value) {
$this->data[$key] = $value;
}
public function getData() {
return array_merge($this->defaultData, $this->data);
}
/**
* @param AbstractBuilderComponent $component
*/
public function add($component) {
}
}PK9e�[�4k//$SlideBuilder/BuilderComponentCol.phpnu�[���<?php
namespace Nextend\SmartSlider3\SlideBuilder;
class BuilderComponentCol extends AbstractBuilderComponent {
protected $defaultData = array(
"type" => 'col',
"name" => 'Column',
"colwidth" => '1/1',
"layers" => array(),
"desktopportraitpadding" =>
'10|*|10|*|10|*|10|*|px'
);
/** @var AbstractBuilderComponent[] */
private $layers = array();
/**
*
* @param BuilderComponentRow $container
* @param $width
*/
public function __construct($container, $width = '1/1') {
$this->defaultData['colwidth'] = $width;
$container->add($this);
}
/**
* @param $layer AbstractBuilderComponent
*/
public function add($layer) {
$this->layers[] = $layer;
}
public function getData() {
$this->data['layers'] = array();
foreach ($this->layers AS $layer) {
$this->data['layers'][] = $layer->getData();
}
return parent::getData();
}
}PK:e�[ؔذ��(SlideBuilder/BuilderComponentContent.phpnu�[���<?php
namespace Nextend\SmartSlider3\SlideBuilder;
class BuilderComponentContent extends AbstractBuilderComponent {
protected $defaultData = array(
"type" => 'content',
"name" => 'Content',
"desktopportraitpadding" =>
'0|*|0|*|0|*|0|*|px'
);
/** @var AbstractBuilderComponent[] */
private $layers = array();
/**
*
* @param AbstractBuilderComponent $container
*/
public function __construct($container) {
$container->add($this);
}
/**
* @param $layer AbstractBuilderComponent
*/
public function add($layer) {
$this->layers[] = $layer;
}
public function getData() {
$this->data['layers'] = array();
foreach ($this->layers as $layer) {
$this->data['layers'][] = $layer->getData();
}
return parent::getData();
}
}PK:e�[����%SlideBuilder/BuilderComponentItem.phpnu�[���<?php
namespace Nextend\SmartSlider3\SlideBuilder;
use Nextend\SmartSlider3\Renderable\Item;
class BuilderComponentItem extends AbstractBuilderComponent {
/**
* @var Item\AbstractItem
*/
protected $item;
/**
*
* @param AbstractBuilderComponent $container
* @param string $type
*/
public function __construct($container, $type) {
$this->item = Item\ItemFactory::getItem($type);
$this->defaultData = array_merge($this->defaultData,
$this->item->getValues());
$container->add($this);
}
public function getData() {
return array(
'type' => $this->item->getType(),
'values' => parent::getData()
);
}
public function getLabel() {
return $this->item->getTitle();
}
public function getLayerProperties() {
return $this->item->getLayerProperties();
}
}PK:e�[s�&&&SlideBuilder/BuilderComponentLayer.phpnu�[���<?php
namespace Nextend\SmartSlider3\SlideBuilder;
class BuilderComponentLayer extends AbstractBuilderComponent {
protected $defaultData = array(
"type" => 'layer',
"eye" => false,
"lock" => false,
"animations" => array(
"specialZeroIn" => 0,
"transformOriginIn" => "50|*|50|*|0",
"inPlayEvent" => "",
"loopRepeatSelfOnly" => 0,
"repeatCount" => 0,
"repeatStartDelay" => 0,
"transformOriginLoop" => "50|*|50|*|0",
"loopPlayEvent" => "",
"loopPauseEvent" => "",
"loopStopEvent" => "",
"transformOriginOut" => "50|*|50|*|0",
"outPlayEvent" => "",
"in" => array(),
"loop" => array(),
"out" => array()
),
"id" => null,
"parentid" => null,
"name" => "Layer",
"namesynced" => 1,
"crop" => "visible",
"inneralign" => "left",
"parallax" => 0,
"desktopportrait" => 1,
"desktoplandscape" => 1,
"tabletportrait" => 1,
"tabletlandscape" => 1,
"mobileportrait" => 1,
"mobilelandscape" => 1,
"responsiveposition" => 1,
"responsivesize" => 1,
"desktopportraitleft" => 0,
"desktopportraittop" => 0,
"desktopportraitwidth" => "auto",
"desktopportraitheight" => "auto",
"desktopportraitalign" => "center",
"desktopportraitvalign" => "middle",
"desktopportraitparentalign" => "center",
"desktopportraitparentvalign" => "middle",
"desktopportraitfontsize" => 100
);
/** @var BuilderComponentItem */
public $item;
/**
*
* @param AbstractBuilderComponent $container
* @param string $item
*/
public function __construct($container, $item) {
$container->add($this);
new BuilderComponentItem($this, $item);
}
/**
* @param $component BuilderComponentItem
*/
public function add($component) {
$this->item = $component;
foreach ($this->item->getLayerProperties() AS $k => $v) {
if ($k == 'width' || $k == 'height' || $k
== 'top' || $k == 'left') {
$this->defaultData['desktopportrait' . $k] =
$v;
} else {
$this->defaultData[$k] = $v;
}
}
$this->defaultData['name'] =
$this->item->getLabel() . ' layer';
}
public function getData() {
$this->data['item'] = $this->item->getData();
return parent::getData();
}
}PK:e�[̷mll$SlideBuilder/BuilderComponentRow.phpnu�[���<?php
namespace Nextend\SmartSlider3\SlideBuilder;
class BuilderComponentRow extends AbstractBuilderComponent {
protected $defaultData = array(
"type" => 'row',
"name" => 'Row',
"cols" => array(),
"desktopportraitpadding" =>
'10|*|10|*|10|*|10|*|px'
);
/** @var BuilderComponentCol[] */
private $cols = array();
/**
*
* @param AbstractBuilderComponent $container
*/
public function __construct($container) {
$container->add($this);
}
/**
* @param $layer BuilderComponentCol
*/
public function add($layer) {
$this->cols[] = $layer;
}
public function getData() {
$this->data['cols'] = array();
foreach ($this->cols AS $layer) {
$this->data['cols'][] = $layer->getData();
}
return parent::getData();
}
}PK:e�[�.O~��&SlideBuilder/BuilderComponentSlide.phpnu�[���<?php
namespace Nextend\SmartSlider3\SlideBuilder;
class BuilderComponentSlide extends AbstractBuilderComponent {
protected $data = array(
'title' => '',
'published' => 1,
'first' => 0,
'description' => '',
'thumbnail' => '',
'ordering' => 0,
'generator_id' => 0,
"static-slide" => 0,
"backgroundColor" => "ffffff00",
"backgroundImage" => "",
"backgroundImageOpacity" => 100,
"backgroundAlt" => "",
"backgroundTitle" => "",
"backgroundMode" => "default",
"backgroundVideoMp4" => "",
"backgroundVideoOpacity" => 100,
"backgroundVideoMuted" => 1,
"backgroundVideoLoop" => 1,
"backgroundVideoReset" => 1,
"backgroundVideoMode" => "fill",
"href" => "",
"href-target" => "",
"slide-duration" => 0,
"desktopportraitpadding" =>
'10|*|10|*|10|*|10'
);
/** @var AbstractBuilderComponent[] */
private $layers = array();
/** @var BuilderComponentContent */
public $content;
public function __construct($properties = array()) {
foreach ($properties as $k => $v) {
$this->data[$k] = $v;
}
$this->content = new BuilderComponentContent($this);
}
/**
* @param $layer AbstractBuilderComponent
*/
public function add($layer) {
array_unshift($this->layers, $layer);
}
public function getData() {
$this->data['layers'] = array();
foreach ($this->layers as $layer) {
$this->data['layers'][] = $layer->getData();
}
return parent::getData();
}
public function getLayersData() {
$data = $this->getData();
return $data['layers'];
}
}PK:e�[(���IISlider/Admin/AdminSlide.phpnu�[���<?php
namespace Nextend\SmartSlider3\Slider\Admin;
use Nextend\SmartSlider3\Slider\Slide;
class AdminSlide extends Slide {
public function setSlidesParams() {
$this->attributes['data-variables'] =
json_encode($this->variables);
parent::setSlidesParams();
}
protected function addSlideLink() {
}
public function isVisible() {
return true;
}
protected function onCreate() {
}
public function setCurrentlyEdited() {
$this->underEdit = true;
$this->classes .= ' n2-ss-currently-edited-slide';
}
}PK:e�[��'��Slider/Admin/AdminSlider.phpnu�[���<?php
namespace Nextend\SmartSlider3\Slider\Admin;
use Nextend\SmartSlider3\Slider\Slide;
use Nextend\SmartSlider3\Slider\Slider;
class AdminSlider extends Slider {
public $isAdmin = true;
protected $editedSlideID;
/**
* @var AdminSlides
*/
protected $slidesBuilder;
public function __construct($MVCHelper, $sliderId, $parameters) {
parent::__construct($MVCHelper, $sliderId, $parameters, true);
}
public static function getCacheId($sliderId) {
return self::$_identifier . '-admin-' . $sliderId;
}
public function setElementId() {
$this->elementId = self::$_identifier . '-' . 0;
}
public function initSlides() {
if ($this->loadState < self::LOAD_STATE_SLIDES) {
$this->initSlider();
if (!$this->isGroup) {
$this->slidesBuilder = new AdminSlides($this);
$this->slidesBuilder->initSlides($this->parameters['slidesData'],
$this->parameters['generatorData']);
}
$this->loadState = self::LOAD_STATE_SLIDES;
}
}
/**
* @return Slide
*/
public function getEditedSlide() {
return $this->slidesBuilder->getEditedSlide();
}
/**
* @return int
*/
public function getEditedSlideID() {
return $this->editedSlideID;
}
/**
* @param int $editedSlideID
*/
public function setEditedSlideID($editedSlideID) {
$this->editedSlideID = $editedSlideID;
}
}PK:e�[��i���Slider/Admin/AdminSlides.phpnu�[���<?php
namespace Nextend\SmartSlider3\Slider\Admin;
use Nextend\Framework\Platform\Platform;
use Nextend\Framework\Request\Request;
use Nextend\SmartSlider3\Application\Model\ModelSlides;
use Nextend\SmartSlider3\Slider\Slide;
use Nextend\SmartSlider3\Slider\Slides;
class AdminSlides extends Slides {
/**
* @var Slide
*/
protected $editedSlide;
protected function slidesWhereQuery() {
$date = Platform::getMysqlDate();
return " AND ((published = 1 AND (publish_up =
'1970-01-01 00:00:00' OR publish_up < '{$date}')
AND (publish_down = '1970-01-01 00:00:00' OR
publish_down > '{$date}'))
OR id = " .
Request::$REQUEST->getInt('slideid') . ") ";
}
protected function createSlide($slideRow) {
return new AdminSlide($this->slider, $slideRow);
}
protected function makeSlides($slidesData, $extendGenerator = array())
{
$slides = &$this->slides;
$editedSlideID = $this->slider->getEditedSlideID();
$this->legacyFixOnlyStaticOverlays($slides);
$staticSlides = array();
for ($j = count($slides) - 1; $j >= 0; $j--) {
$slide = $slides[$j];
if ($slide->isStatic()) {
if ($slide->id == $editedSlideID) {
$this->editedSlide = $slide;
}
$staticSlides[] = $slide;
$this->slider->addStaticSlide($slide);
array_splice($slides, $j, 1);
}
}
for ($i = 0; $i < count($slides); $i++) {
$slides[$i]->initGenerator($extendGenerator);
}
for ($i = count($slides) - 1; $i >= 0; $i--) {
if ($slides[$i]->hasGenerator()) {
array_splice($slides, $i, 1,
$slides[$i]->expandSlideAdmin());
}
}
if (!$this->editedSlide) {
for ($i = 0; $i < count($slides); $i++) {
if ($slides[$i]->id == $editedSlideID) {
$this->editedSlide = $slides[$i];
$this->slider->setActiveSlide($this->editedSlide);
break;
}
}
}
// If we edit a static slide -> remove other static slides from
the canvas.
if ($this->editedSlide->isStatic()) {
for ($i = 0; $i < count($this->slider->staticSlides);
$i++) {
if ($this->slider->staticSlides[$i]->id !=
$editedSlideID) {
array_splice($this->slider->staticSlides, $i, 1);
$i--;
}
}
if (empty($slides)) {
/**
* When the currently edited slide is static and there is
not other slide, we create a temporary empty slide
*/
$slidesModel = new ModelSlides($this->slider);
$slides[] =
$this->createSlide($slidesModel->convertSlideDataToDatabaseRow(array(
'id' => 0,
'title' => 'Slide #' .
1,
'layers' => '[]',
'description' => '',
'thumbnail' => '',
'published' => 1,
'publish_up' => '0000-00-00
00:00:00',
'publish_down' => '0000-00-00
00:00:00',
'backgroundImage' => ''
)));
}
$this->slider->setActiveSlide($slides[0]);
} else {
if ($this->maximumSlideCount > 0) {
array_splice($slides, $this->maximumSlideCount);
if (!in_array($this->editedSlide, $slides)) {
$slides[] = $this->editedSlide;
}
}
}
$this->editedSlide->setCurrentlyEdited();
for ($i = 0; $i < count($slides); $i++) {
$slides[$i]->setPublicID($i + 1);
}
}
/**
* @return Slide
*/
public function getEditedSlide() {
return $this->editedSlide;
}
}PK:e�[av]���"Slider/Base/PlatformSliderBase.phpnu�[���<?php
namespace Nextend\SmartSlider3\Slider\Base;
class PlatformSliderBase {
public function addCMSFunctions($text) {
return $text;
}
}PK:e�[�
���#Slider/Base/PlatformSliderTrait.phpnu�[���<?php
namespace Nextend\SmartSlider3\Slider\Base;
use Nextend\SmartSlider3\Slider;
trait PlatformSliderTrait {
/**
* @var PlatformSliderBase
*/
private $platformSlider;
public function initPlatformSlider() {
$this->platformSlider = new Slider\Joomla\PlatformSlider();
}
public function addCMSFunctions($text) {
return $this->platformSlider->addCMSFunctions($text);
}
}PK:e�[�h��Slider/Cache/CacheGenerator.phpnu�[���<?php
namespace Nextend\SmartSlider3\Slider\Cache;
use Nextend\Framework\Cache\Manifest;
use Nextend\Framework\Platform\Platform;
use Nextend\SmartSlider3\Generator\Generator;
use Nextend\SmartSlider3\Slider\Slider;
class CacheGenerator extends Manifest {
/**
* @var Slider
*/
private $slider;
private $generator;
protected $_storageEngine = 'database';
/**
* @param Slider $slider
* @param Generator $generator
*/
public function __construct($slider, $generator) {
parent::__construct($slider->cacheId, false);
$this->slider = $slider;
$this->generator = $generator;
}
protected function decode($data) {
return json_decode($data, true);
}
protected function isCacheValid(&$manifestData) {
$nextRefresh = $manifestData['cacheTime'] + max(0,
floatval($this->generator->currentGenerator['params']->get('cache-expiration',
1))) * 60 * 60;
if ($manifestData['cacheTime'] + max(0,
floatval($this->generator->currentGenerator['params']->get('cache-expiration',
1))) * 60 * 60 < Platform::getTimestamp()) {
return false;
}
$this->generator->setNextCacheRefresh($nextRefresh);
return true;
}
protected function addManifestData(&$manifestData) {
$manifestData['cacheTime'] = Platform::getTimestamp();
$this->generator->setNextCacheRefresh($manifestData['cacheTime']
+ max(0,
floatval($this->generator->currentGenerator['params']->get('cache-expiration',
1))) * 60 * 60);
}
}PK:e�[<{���Slider/Cache/CacheSlider.phpnu�[���<?php
namespace Nextend\SmartSlider3\Slider\Cache;
use Nextend\Framework\Cache\Manifest;
use Nextend\Framework\Platform\Platform;
use Nextend\Framework\Plugin;
use Nextend\SmartSlider3\Application\Helper\HelperSliderChanged;
use Nextend\SmartSlider3\Application\Model\ModelGenerator;
use Nextend\SmartSlider3\Settings;
use Nextend\SmartSlider3\SmartSlider3Info;
class CacheSlider extends Manifest {
private $parameters = array();
protected $_storageEngine = 'database';
private $isExtended = false;
public function __construct($cacheId, $parameters = array()) {
parent::__construct($cacheId, false);
$this->parameters = $parameters;
}
protected function decode($data) {
return json_decode($data, true);
}
/**
* @param $fileName
* @param $hash
* @param callback $callable
*
* @return bool
*/
public function makeCache($fileName, $hash, $callable) {
$variations = 1;
if
($this->exists($this->getManifestKey('variations'))) {
$variations =
intval($this->get($this->getManifestKey('variations')));
}
$fileName = $fileName . mt_rand(1, $variations);
if ($this->exists($this->getManifestKey('data'))) {
$data =
json_decode($this->get($this->getManifestKey('data')),
true);
$fileName = $this->extendFileName($fileName, $data);
} else {
$this->clearCurrentGroup();
}
$output = parent::makeCache($fileName, $hash, $callable);
return $output;
}
protected function createCacheFile($fileName, $hash, $content) {
$this->set($this->getManifestKey('data'),
json_encode($this->parameters['slider']->manifestData));
$fileName = $this->extendFileName($fileName,
$this->parameters['slider']->manifestData);
return parent::createCacheFile($fileName, $hash, $content);
}
private function extendFileName($fileName, $manifestData) {
if ($this->isExtended) {
return $fileName;
}
$this->isExtended = true;
$generators = $manifestData['generator'];
if (count($generators)) {
$generatorModel = new
ModelGenerator($this->parameters['slider']);
foreach ($generators AS $generator) {
list($group, $type, $params) = $generator;
$generatorGroup =
$generatorModel->getGeneratorGroup($group);
if (!$generatorGroup) {
echo n2_('Slider error! Generator group not found:
' . $group);
} else {
$generatorSource =
$generatorGroup->getSource($type);
if (!$generatorSource) {
echo n2_('Slider error! Generator source not
found: ' . $type);
} else {
$fileName .= call_user_func(array(
$generatorSource,
'cacheKey'
), $params);
}
}
}
}
return $fileName;
}
protected function isCacheValid(&$manifestData) {
if (!isset($manifestData['version']) ||
$manifestData['version'] != SmartSlider3Info::$version) {
return false;
}
$helper = new
HelperSliderChanged($this->parameters['slider']);
if
($helper->isSliderChanged($this->parameters['slider']->sliderId))
{
$this->clearCurrentGroup();
$helper->setSliderChanged($this->parameters['slider']->sliderId,
0);
return false;
}
$time = Platform::getTimestamp();
if ($manifestData['nextCacheRefresh'] < $time) {
return false;
}
if (!isset($manifestData['currentPath']) ||
$manifestData['currentPath'] != md5(__FILE__)) {
return false;
}
return true;
}
protected function addManifestData(&$manifestData) {
$manifestData['nextCacheRefresh'] =
Plugin::applyFilters('SSNextCacheRefresh',
$this->parameters['slider']->getNextCacheRefresh(),
array($this->parameters['slider']));
$manifestData['currentPath'] = md5(__FILE__);
$manifestData['version'] =
SmartSlider3Info::$version;
$variations = 1;
$params = $this->parameters['slider']->params;
if (!$params->get('randomize-cache', 0) &&
($params->get('randomize', 0) ||
$params->get('randomizeFirst', 0))) {
$variations = intval($params->get('variations',
5));
if ($variations < 1) {
$variations = 1;
}
}
$this->set($this->getManifestKey('variations'),
$variations);
}
}PK:e�[ͭѕ��Slider/Feature/Align.phpnu�[���<?php
namespace Nextend\SmartSlider3\Slider\Feature;
use Nextend\Framework\View\Html;
class Align {
private $slider;
public $align = 'normal';
public function __construct($slider) {
$this->slider = $slider;
$this->align = $slider->params->get('align',
'normal');
}
public function renderSlider($sliderHTML, $maxWidth) {
$htmlOptions = array(
"id" => $this->slider->elementId .
'-align',
"class" => "n2-ss-align",
"encode" => false
);
$htmlOptionsPadding = array(
"class" => 'n2-padding'
);
if (!$this->slider->features->responsive->scaleUp
&& $this->align != 'normal') {
switch ($this->align) {
case 'left':
case 'right':
$width =
$this->slider->assets->sizes['width'];
$htmlOptions["style"] = "float:
{$this->align}; width: {$width}px; max-width:100%;";
break;
case 'center':
$htmlOptions["style"] = "margin: 0 auto;
max-width: {$maxWidth}px;";
break;
}
}
$sliderHTML = Html::tag("div", $htmlOptions,
Html::tag("div", $htmlOptionsPadding, $sliderHTML));
if
($this->slider->params->get('clear-both-after', 1)) {
$sliderHTML .= Html::tag("div",
array("class" => "n2_clear"), "");
}
return $sliderHTML;
}
public function makeJavaScriptProperties(&$properties) {
$properties['align'] = $this->align;
$properties['isDelayed'] =
intval($this->slider->params->get('is-delayed', 0));
}
}PK:e�[𠤻``Slider/Feature/Autoplay.phpnu�[���<?php
namespace Nextend\SmartSlider3\Slider\Feature;
use Nextend\Framework\Data\Data;
use Nextend\Framework\Parser\Common;
use Nextend\SmartSlider3\Slider\Slider;
class Autoplay {
/**
* @var Slider
*/
private $slider;
public $isEnabled = 0, $isStart = 0, $duration = 8000;
public $isLoop = 1, $interval = 1, $intervalModifier =
'loop', $intervalSlide = 'current', $allowReStart = 0;
public $stopOnClick = 1, $stopOnMediaStarted = 1;
public $resumeOnMediaEnded = 1, $resumeOnSlideChanged = 0;
public function __construct($slider) {
$this->slider = $slider;
$params = $slider->params;
$this->upgradeData($params);
$this->isEnabled = intval($params->get('autoplay',
0));
$this->isStart =
intval($params->get('autoplayStart', 1));
$this->duration =
intval($params->get('autoplayDuration', 8000));
if ($this->duration < 1) {
$this->duration = 1500;
}
list($this->interval, $this->intervalModifier,
$this->intervalSlide) =
(array)Common::parse($slider->params->get('autoplayfinish',
'1|*|loop|*|current'));
$this->allowReStart =
intval($params->get('autoplayAllowReStart', 0));
$this->isLoop = intval($params->get('autoplayLoop',
1));
$this->interval = intval($this->interval);
$this->stopOnClick =
intval($params->get('autoplayStopClick', 1));
$this->stopOnMouse =
$params->get('autoplayStopMouse', 'enter');
$this->stopOnMediaStarted =
intval($params->get('autoplayStopMedia', 1));
$this->resumeOnClick =
intval($params->get('autoplayResumeClick', 0));
$this->resumeOnMouse =
$params->get('autoplayResumeMouse', 0);
$this->resumeOnMediaEnded =
intval($params->get('autoplayResumeMedia', 1));
}
public function makeJavaScriptProperties(&$properties) {
$properties['autoplay'] = array(
'enabled' => $this->isEnabled,
'start' => $this->isStart,
'duration' => $this->duration,
'autoplayLoop' => $this->isLoop,
'allowReStart' => $this->allowReStart,
'pause' => array(
'click' => $this->stopOnClick,
'mouse' => $this->stopOnMouse,
'mediaStarted' => $this->stopOnMediaStarted
),
'resume' => array(
'click' => $this->resumeOnClick,
'mouse' => $this->resumeOnMouse,
'mediaEnded' =>
$this->resumeOnMediaEnded,
'slidechanged' =>
$this->resumeOnSlideChanged
),
'interval' => $this->interval,
'intervalModifier' => $this->intervalModifier,
'intervalSlide' => $this->intervalSlide
);
}
/**
* For compatibility with legacy autoplay values.
*
* @param Data $params
*/
protected function upgradeData($params) {
list($interval, $intervalModifier, $intervalSlide) =
(array)Common::parse($params->get('autoplayfinish',
'1|*|loop|*|current'));
if ($interval <= 0 || $params->get('autoplayLoop')
=== '') {
// 0|*|loop|*|current -> In old versions it brought to the
Next slide.
if ($intervalModifier === 'slide' &&
$intervalSlide === 'next') {
$params->set('autoplayfinish',
'1|*|slide|*|current');
$params->set('autoplayLoop', '0');
}
// 0|*|loop/slide/slideindex|*|current -> Infinite loop
// 0|*|loop|*|next -> Infinite loop
if ($intervalSlide === 'current' ||
($intervalModifier === 'loop' && $intervalSlide ===
'next')) {
$params->set('autoplayfinish',
'1|*|loop|*|current');
$params->set('autoplayLoop', '1');
}
// 0|*|slideindex|*|next -> In old versions it always
brought to the 2nd slide.
if ($intervalModifier === 'slideindex' &&
$intervalSlide === 'next') {
$params->set('autoplayfinish',
'2|*|slideindex|*|current');
$params->set('autoplayLoop', '0');
} else {
//next is not allowed for "slide" and
"slideindex" modifiers
if ($intervalModifier === 'slide' ||
$intervalModifier === 'slideindex') {
$params->set('autoplayfinish', $interval .
'|*|' . $intervalModifier . '|*|current');
// turn off Loop, and work with the original settings
$params->set('autoplayLoop',
'0');
}
}
}
}
}PK:e�[��f
��"Slider/Feature/BlockRightClick.phpnu�[���<?php
namespace Nextend\SmartSlider3\Slider\Feature;
class BlockRightClick {
private $slider;
public $isEnabled = 0;
public function __construct($slider) {
$this->slider = $slider;
$this->isEnabled =
intval($slider->params->get('blockrightclick', 0));
}
public function makeJavaScriptProperties(&$properties) {
$properties['blockrightclick'] = $this->isEnabled;
}
}PK:e�[�/$
Slider/Feature/Controls.phpnu�[���<?php
namespace Nextend\SmartSlider3\Slider\Feature;
class Controls {
private $slider;
private $mousewheel = 0;
public $drag = 0;
public $touch = 1;
public $keyboard = 0;
public $blockCarouselInteraction = 1;
public function __construct($slider) {
$this->slider = $slider;
$this->mousewheel =
intval($slider->params->get('controlsScroll', 0));
$this->touch =
$slider->params->get('controlsTouch',
'horizontal');
$this->keyboard =
intval($slider->params->get('controlsKeyboard', 1));
$this->blockCarouselInteraction =
intval($slider->params->get('controlsBlockCarouselInteraction',
1));
}
public function makeJavaScriptProperties(&$properties) {
$properties['controls'] = array(
'mousewheel' =>
$this->mousewheel,
'touch' => $this->touch,
'keyboard' => $this->keyboard,
'blockCarouselInteraction' =>
$this->blockCarouselInteraction
);
}
}PK:e�[��ttSlider/Feature/Focus.phpnu�[���<?php
namespace Nextend\SmartSlider3\Slider\Feature;
use Nextend\SmartSlider3\Settings;
use Nextend\SmartSlider3\Slider\Slider;
class Focus {
/**
* @var Slider
*/
private $slider;
private $focusOffsetTop = '';
private $focusOffsetBottom = '';
public function __construct($slider) {
$this->slider = $slider;
$responsiveHeightOffsetValue = '';
$this->focusOffsetTop =
Settings::get('responsive-focus-top',
$responsiveHeightOffsetValue);
$this->focusOffsetBottom =
Settings::get('responsive-focus-bottom', '');
}
public function makeJavaScriptProperties(&$properties) {
$properties['responsive']['focus'] = array(
'offsetTop' => $this->focusOffsetTop,
'offsetBottom' => $this->focusOffsetBottom
);
$params = $this->slider->params;
if ($params->get('responsive-mode') ==
'fullpage') {
if (!$params->has('responsive-focus') &&
$params->has('responsiveHeightOffset')) {
$old = $params->get('responsiveHeightOffset');
$oldDefault = '';
if ($old !== $oldDefault) {
$params->set('responsive-focus', 1);
$params->set('responsive-focus-top',
$old);
}
}
if ($params->get('responsive-focus', 0)) {
$properties['responsive']['focus'] =
array(
'offsetTop' =>
$params->get('responsive-focus-top', ''),
'offsetBottom' =>
$params->get('responsive-focus-bottom', '')
);
}
}
}
}PK:e�[�NP**Slider/Feature/LayerMode.phpnu�[���<?php
namespace Nextend\SmartSlider3\Slider\Feature;
class LayerMode {
private $slider;
public $playOnce = 0;
public $playFirstLayer = 1;
public $mode = 'skippable';
public $inAnimation = 'mainInEnd';
public function __construct($slider) {
$this->slider = $slider;
$this->playOnce =
intval($slider->params->get('playonce', 0));
$this->playFirstLayer =
intval($slider->params->get('playfirstlayer', 1));
switch
($slider->params->get('layer-animation-play-mode',
'skippable')) {
case 'forced':
$this->mode = 'forced';
break;
default:
$this->mode = 'skippable';
}
switch
($slider->params->get('layer-animation-play-in',
'end')) {
case 'end':
$this->inAnimation = 'mainInEnd';
break;
default:
$this->inAnimation = 'mainInStart';
}
}
public function makeJavaScriptProperties(&$properties) {
$params = $this->slider->params;
$properties['perspective'] = max(0,
intval($params->get('perspective', 1500)));
$properties['layerMode'] = array(
'playOnce' => $this->playOnce,
'playFirstLayer' => $this->playFirstLayer,
'mode' => $this->mode,
'inAnimation' => $this->inAnimation
);
$properties['parallax'] = array(
'enabled' =>
intval($params->get('parallax-enabled', 1)),
'mobile' =>
intval($params->get('parallax-enabled-mobile', 0)),
'is3D' =>
intval($params->get('parallax-3d', 0)),
'animate' =>
intval($params->get('parallax-animate', 1)),
'horizontal' =>
$params->get('parallax-horizontal', 'mouse'),
'vertical' =>
$params->get('parallax-vertical', 'mouse'),
'origin' =>
$params->get('parallax-mouse-origin', 'slider'),
'scrollmove' =>
$params->get('parallax-scroll-move', 'both')
);
}
}PK:e�[F}NJ}}Slider/Feature/LazyLoad.phpnu�[���<?php
namespace Nextend\SmartSlider3\Slider\Feature;
class LazyLoad {
private $slider;
public $isEnabled = 0, $neighborCount = 0, $layerImageOptimize = 0,
$layerImageWidthNormal = 1400, $layerImageWidthTablet = 800,
$layerImageWidthMobile = 425;
public function __construct($slider) {
$this->slider = $slider;
$this->isEnabled =
intval($slider->params->get('imageload', 0));
$this->neighborCount =
intval($slider->params->get('imageloadNeighborSlides', 0));
$this->layerImageOptimize =
intval($slider->params->get('layer-image-optimize', 0))
&& !$slider->isAdmin;
if ($this->layerImageOptimize) {
$this->layerImageWidthNormal =
$slider->params->get('layer-image-width-normal', 1400);
$this->layerImageWidthTablet =
$slider->params->get('layer-image-width-tablet', 800);
$this->layerImageWidthMobile =
$slider->params->get('layer-image-width-mobile', 425);
}
$this->layerImageSizeBase64 =
intval($slider->params->get('layer-image-base64', 0))
&& !$slider->isAdmin;
$this->layerImageSizeBase64Size = max(0,
intval($slider->params->get('layer-image-base64-size', 5)))
* 1024;
}
public function makeJavaScriptProperties(&$properties) {
$properties['lazyLoad'] = $this->isEnabled;
$properties['lazyLoadNeighbor'] =
$this->neighborCount;
}
}PK:e�[��"Slider/Feature/MaintainSession.phpnu�[���<?php
namespace Nextend\SmartSlider3\Slider\Feature;
class MaintainSession {
private $slider;
public $isEnabled = 0;
public function __construct($slider) {
$this->slider = $slider;
$this->isEnabled =
intval($slider->params->get('maintain-session', 0));
}
public function makeJavaScriptProperties(&$properties) {
$properties['maintainSession'] = $this->isEnabled;
}
}PK:e�[A�h9��Slider/Feature/Margin.phpnu�[���<?php
namespace Nextend\SmartSlider3\Slider\Feature;
use Nextend\Framework\Platform\Platform;
use Nextend\Framework\View\Html;
class Margin {
private $slider;
private $margin;
public function __construct($slider) {
$this->slider = $slider;
$this->margin = explode('|*|',
$slider->params->get('margin', '0|*|0|*|0|*|0'));
}
public function renderSlider($sliderHTML) {
if (!Platform::isAdmin() && count($this->margin) >=
4) {
array_splice($this->margin, 4);
if ($this->margin[0] != 0 || $this->margin[1] != 0 ||
$this->margin[2] != 0 || $this->margin[3] != 0) {
$sliderHTML = Html::tag("div", array(
"class" => "n2-ss-margin",
"encode" => false,
"style" => "margin: " .
implode('px ', $this->margin) . "px;"
), $sliderHTML);
}
}
return $sliderHTML;
}
}PK:e�[���i+i+Slider/Feature/Optimize.phpnu�[���<?php
namespace Nextend\SmartSlider3\Slider\Feature;
use Exception;
use Nextend\Framework\FastImageSize\FastImageSize;
use Nextend\Framework\Image\ImageEdit;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
class Optimize {
private $slider;
private $playWhenVisible = 1;
private $playWhenVisibleAt = 0.5;
private $backgroundImageWidthNormal = 1920, $quality = 70,
$thumbnailWidth = 100, $thumbnailHeight = 60, $thumbnailQuality = 70;
public function __construct($slider) {
$this->slider = $slider;
$this->playWhenVisible =
intval($slider->params->get('playWhenVisible', 1));
$this->playWhenVisibleAt = max(0, min(100,
intval($slider->params->get('playWhenVisibleAt', 50)))) /
100;
$this->backgroundImageWidthNormal =
intval($slider->params->get('optimize-slide-width-normal',
1920));
$this->quality =
intval($slider->params->get('optimize-quality', 70));
$this->thumbnailWidth =
$slider->params->get('optimizeThumbnailWidth', 100);
$this->thumbnailHeight =
$slider->params->get('optimizeThumbnailHeight', 60);
$this->thumbnailQuality =
$slider->params->get('optimize-thumbnail-quality', 70);
}
public function makeJavaScriptProperties(&$properties) {
$properties['playWhenVisible'] =
$this->playWhenVisible;
$properties['playWhenVisibleAt'] =
$this->playWhenVisibleAt;
}
public function optimizeBackground($image, $x = 50, $y = 50) {
try {
$imageSize = FastImageSize::getSize($image);
if ($imageSize) {
$optimizeScale =
$this->slider->params->get('optimize-scale', 0);
$targetWidth = $imageSize['width'];
$targetHeight = $imageSize['height'];
if ($optimizeScale && $targetWidth >
$this->backgroundImageWidthNormal) {
$targetHeight =
ceil($this->backgroundImageWidthNormal / $targetWidth * $targetHeight);
$targetWidth = $this->backgroundImageWidthNormal;
}
return ImageEdit::resizeImage('slider/cache',
ResourceTranslator::toPath($image), $targetWidth, $targetHeight, false,
'normal', 'ffffff', true, $this->quality, true, $x,
$y);
}
return $image;
} catch (Exception $e) {
return $image;
}
}
public function optimizeThumbnail($image) {
if
($this->slider->params->get('optimize-thumbnail-scale',
0)) {
try {
return ImageEdit::resizeImage('slider/cache',
ResourceTranslator::toPath($image), $this->thumbnailWidth,
$this->thumbnailHeight, false, 'normal', 'ffffff',
true, $this->thumbnailQuality, true);
} catch (Exception $e) {
return ResourceTranslator::toUrl($image);
}
}
return ResourceTranslator::toUrl($image);
}
public function adminOptimizeThumbnail($image) {
if
($this->slider->params->get('optimize-thumbnail-scale',
0)) {
try {
return ImageEdit::resizeImage('slider/cache',
ResourceTranslator::toPath($image), $this->thumbnailWidth,
$this->thumbnailHeight, true, 'normal', 'ffffff',
true, $this->thumbnailQuality, true);
} catch (Exception $e) {
return ResourceTranslator::toUrl($image);
}
}
return ResourceTranslator::toUrl($image);
}
public function optimizeImageWebP($src, $options) {
$options = array_merge(array(
'optimize' => false,
'quality' => 70,
'resize' => false,
'defaultWidth' => 1920,
'mediumWidth' => 1200,
'mediumHeight' => 0,
'smallWidth' => 500,
'smallHeight' => 0,
'focusX' => 50,
'focusY' => 50,
'compressOriginal' => false
), $options);
$data = array();
if ($options['optimize'] &&
function_exists('imagewebp')) {
$imagePath = ResourceTranslator::toPath($src);
if (isset($imagePath[0])) {
$extension = pathinfo($imagePath, PATHINFO_EXTENSION);
$originalImageWidth = FastImageSize::getWidth($src);
if ($extension != 'webp' &&
$originalImageWidth) {
$isRemote = false;
if (preg_match('/(https?:)?\/\//',
$imagePath)) {
//this is a remote image
$isRemote = true;
}
$normalScale = 1;
if ($options['resize']) {
if ($originalImageWidth >
$options['defaultWidth']) {
$normalScale =
$options['defaultWidth'] / $originalImageWidth;
}
}
$imageWebpUrl =
ImageEdit::scaleImageWebp('slider/cache', $src, array(
'mode' => 'scale',
'scale' => $normalScale,
'quality' =>
$options['quality'],
'remote' => $isRemote
));
if ($imageWebpUrl) {
$width =
FastImageSize::getWidth($imageWebpUrl);
$imageWebpUrl =
ResourceTranslator::toUrl($imageWebpUrl);
$data['normal'] = array(
'src' => $imageWebpUrl,
'width' => $width
);
if ($options['resize']) {
if ($options['compressOriginal']
&& $normalScale < 1) {
$imageWebpUrlOriginal =
ImageEdit::scaleImageWebp('slider/cache', $src, array(
'mode' =>
'scale',
'quality' =>
$options['quality'],
'remote' => $isRemote
));
if ($imageWebpUrlOriginal) {
$width =
FastImageSize::getWidth($imageWebpUrlOriginal);
if ($width) {
$imageWebpUrlOriginal =
ResourceTranslator::toUrl($imageWebpUrlOriginal);
$data['original'] =
array(
'src' =>
$imageWebpUrlOriginal,
'width' => $width
);
}
}
}
if ($originalImageWidth >
$options['smallWidth'] &&
$options['mediumWidth'] > $options['smallWidth']) {
if ($options['smallHeight'] >
0) {
$imageWebpUrlSmall =
ImageEdit::scaleImageWebp('slider/cache', $src, array(
'mode' =>
'resize',
'width' =>
$options['smallWidth'],
'height' =>
$options['smallHeight'],
'focusX' =>
$options['focusX'],
'focusY' =>
$options['focusY'],
'quality' =>
$options['quality'],
'remote' => $isRemote
));
} else {
$mobileScale =
$options['smallWidth'] / $originalImageWidth;
$imageWebpUrlSmall =
ImageEdit::scaleImageWebp('slider/cache', $src, array(
'mode' =>
'scale',
'scale' =>
$mobileScale,
'quality' =>
$options['quality'],
'remote' => $isRemote
));
}
if ($imageWebpUrlSmall) {
$width =
FastImageSize::getWidth($imageWebpUrlSmall);
if ($width) {
$imageWebpUrlSmall =
ResourceTranslator::toUrl($imageWebpUrlSmall);
$data['small'] = array(
'src' =>
$imageWebpUrlSmall,
'width' => $width
);
}
}
}
if ($originalImageWidth >
$options['mediumWidth'] &&
$options['defaultWidth'] > $options['mediumWidth'])
{
if ($options['mediumHeight'] >
0) {
$imageWebpUrlMedium =
ImageEdit::scaleImageWebp('slider/cache', $src, array(
'mode' =>
'resize',
'width' =>
$options['mediumWidth'],
'height' =>
$options['mediumHeight'],
'focusX' =>
$options['focusX'],
'focusY' =>
$options['focusY'],
'quality' =>
$options['quality'],
'remote' => $isRemote
));
} else {
$tabletScale =
$options['mediumWidth'] / $originalImageWidth;
$imageWebpUrlMedium =
ImageEdit::scaleImageWebp('slider/cache', $src, array(
'mode' =>
'scale',
'scale' =>
$tabletScale,
'quality' =>
$options['quality'],
'remote' => $isRemote
));
}
if ($imageWebpUrlMedium) {
$width =
FastImageSize::getWidth($imageWebpUrlMedium);
if ($width) {
$imageWebpUrlMedium =
ResourceTranslator::toUrl($imageWebpUrlMedium);
$data['medium'] = array(
'src' =>
$imageWebpUrlMedium,
'width' => $width
);
}
}
}
}
}
}
}
}
return $data;
}
}PK:e�[e?^�VV*Slider/Feature/PostBackgroundAnimation.phpnu�[���<?php
namespace Nextend\SmartSlider3\Slider\Feature;
use Nextend\Framework\Model\Section;
use Nextend\Framework\Parser\Common;
use Nextend\SmartSlider3\Slider\Slide;
use
Nextend\SmartSlider3Pro\PostBackgroundAnimation\PostBackgroundAnimationStorage;
class PostBackgroundAnimation {
private $slider;
private $hasSlideData = false;
private $slideData = array();
public function __construct($slider) {
$this->slider = $slider;
}
/**
* @param Slide $slide
*/
public function makeSlide($slide) {
$animations =
$this->parseKenBurns($slide->parameters->get('kenburns-animation',
'50|*|50|*|'));
if ($animations) {
$this->slideData[$slide->index] = array(
'data' => $animations,
'speed' =>
$slide->parameters->get('kenburns-animation-speed',
'default'),
'strength' =>
$slide->parameters->get('kenburns-animation-strength',
'default')
);
$this->hasSlideData = true;
}
}
public function makeJavaScriptProperties(&$properties) {
$properties['postBackgroundAnimations'] = array(
'data' =>
$this->parseKenBurns($this->slider->params->get('kenburns-animation',
'50|*|50|*|')),
'speed' =>
$this->slider->params->get('kenburns-animation-speed',
'default'),
'strength' =>
$this->slider->params->get('kenburns-animation-strength',
'default')
);
if ($this->hasSlideData) {
$properties['postBackgroundAnimations']['slides'] =
$this->slideData;
} else if
(!$properties['postBackgroundAnimations']['data']) {
$properties['postBackgroundAnimations'] = 0;
}
if ($properties['postBackgroundAnimations'] &&
!$this->slider->isAdmin) {
$this->slider->sliderType->addClass('n2-ss-feature-post-bg-loader');
}
}
private function parseKenBurns($kenBurnsRaw) {
$kenBurns = Common::parse($kenBurnsRaw);
$animations = array();
if (is_array($kenBurns)) {
if (count($kenBurns) >= 2) {
$animations = array_unique(array_map('intval',
(array)$kenBurns[2]));
}
}
$jsProps = array();
if (count($animations)) {
PostBackgroundAnimationStorage::getInstance();
foreach ($animations as $animationId) {
$animation = Section::getById($animationId,
'postbackgroundanimation');
if (isset($animation)) {
$jsProps[] =
$animation['value']['data'];
}
}
if (count($jsProps)) {
return array(
'transformOrigin' => $kenBurns[0] .
'% ' . $kenBurns[1] . '%',
'animations' => $jsProps
);
}
}
return 0;
}
}
PK:e�[�bͼ����Slider/Feature/Responsive.phpnu�[���<?php
namespace Nextend\SmartSlider3\Slider\Feature;
use Nextend\Framework\Data\Data;
use Nextend\SmartSlider3\Application\Admin\Settings\ViewSettingsGeneral;
use Nextend\SmartSlider3\Settings;
use
Nextend\SmartSlider3\Slider\ResponsiveType\AbstractResponsiveTypeFrontend;
use Nextend\SmartSlider3\Slider\ResponsiveType\ResponsiveTypeFactory;
use Nextend\SmartSlider3\Slider\Slider;
use Nextend\SmartSlider3\SmartSlider3Info;
class Responsive {
/** @var Slider */
public $slider;
/**
* @var AbstractResponsiveTypeFrontend
*/
protected $responsivePlugin;
protected $hideOnDesktopLandscape = 1;
protected $hideOnDesktopPortrait = 1;
protected $hideOnTabletLandscape = 1;
protected $hideOnTabletPortrait = 1;
protected $hideOnMobileLandscape = 1;
protected $hideOnMobilePortrait = 1;
public $onResizeEnabled = 1;
public $type = 'auto';
public $scaleDown = 1;
public $scaleUp = 1;
public $forceFull = 0;
public $forceFullOverflowX = 'body';
public $forceFullHorizontalSelector = '';
public $minimumHeight = -1;
public $maximumSlideWidthLandscape = -1;
public $maximumSlideWidth = 10000;
public $maximumSlideWidthTabletLandscape = -1;
public $maximumSlideWidthTablet = -1;
public $maximumSlideWidthMobileLandscape = -1;
public $maximumSlideWidthMobile = -1;
public $sliderHeightBasedOn = 'real';
public $responsiveDecreaseSliderHeight = 0;
public $focusUser = 1;
public $focusEdge = 'auto';
protected $enabledDevices = array(
'desktopLandscape' => 0,
'desktopPortrait' => 1,
'tabletLandscape' => 0,
'tabletPortrait' => 1,
'mobileLandscape' => 0,
'mobilePortrait' => 1
);
protected $breakpoints = array();
/**
* @var array[]
*/
public $mediaQueries = array(
'all' => false
);
public $sizes = array(
'desktopPortrait' => array(
'width' => 800,
'height' => 600
),
);
public static $translation = array(
'desktoplandscape' => 'desktopLandscape',
'desktopportrait' => 'desktopPortrait',
'tabletlandscape' => 'tabletLandscape',
'tabletportrait' => 'tabletPortrait',
'mobilelandscape' => 'mobileLandscape',
'mobileportrait' => 'mobilePortrait'
);
public function __construct($slider, $features) {
$this->slider = $slider;
$this->hideOnDesktopLandscape =
!intval($slider->params->get('desktoplandscape', 1));
$this->hideOnDesktopPortrait =
!intval($slider->params->get('desktopportrait', 1));
$this->hideOnTabletLandscape =
!intval($slider->params->get('tabletlandscape', 1));
$this->hideOnTabletPortrait =
!intval($slider->params->get('tabletportrait', 1));
$this->hideOnMobileLandscape =
!intval($slider->params->get('mobilelandscape', 1));
$this->hideOnMobilePortrait =
!intval($slider->params->get('mobileportrait', 1));
$this->focusUser =
intval($slider->params->get('responsiveFocusUser', 1));
$this->focusEdge =
$slider->params->get('responsiveFocusEdge',
'auto');
$this->responsivePlugin =
ResponsiveTypeFactory::createFrontend($slider->params->get('responsive-mode',
'auto'), $this);
$this->type =
$this->responsivePlugin->getType();
$this->responsivePlugin->parse($slider->params, $this,
$features);
$this->onResizeEnabled = !$slider->disableResponsive;
if (!$this->scaleDown && !$this->scaleUp) {
$this->onResizeEnabled = 0;
}
$overrideSizeEnabled =
!!$slider->params->get('slider-size-override', 0);
$this->sizes['desktopPortrait']['width'] =
max(10, intval($slider->params->get('width', 1200)));
$this->sizes['desktopPortrait']['height'] =
max(10, intval($slider->params->get('height', 600)));
$heightHelperRatio =
$this->sizes['desktopPortrait']['height'] /
$this->sizes['desktopPortrait']['width'];
$this->enabledDevices['desktopLandscape'] =
intval($slider->params->get('responsive-breakpoint-desktop-landscape-enabled',
0));
$this->enabledDevices['tabletLandscape'] =
intval($slider->params->get('responsive-breakpoint-tablet-landscape-enabled',
0));
$this->enabledDevices['tabletPortrait'] =
intval($slider->params->get('responsive-breakpoint-tablet-portrait-enabled',
1));
$this->enabledDevices['mobileLandscape'] =
intval($slider->params->get('responsive-breakpoint-mobile-landscape-enabled',
0));
$this->enabledDevices['mobilePortrait'] =
intval($slider->params->get('responsive-breakpoint-mobile-portrait-enabled',
1));
$useLocalBreakpoints =
!$slider->params->get('responsive-breakpoint-global', 0);
$landscapePortraitWidth = $breakpointWidthLandscape = 3001;
$previousSize = false;
if ($this->enabledDevices['desktopLandscape']) {
$landscapePortraitWidth = $breakpointWidthPortrait =
intval($useLocalBreakpoints ?
$slider->params->get('responsive-breakpoint-desktop-portrait',
ViewSettingsGeneral::defaults['desktop-large-portrait']) :
Settings::get('responsive-screen-width-desktop-portrait',
ViewSettingsGeneral::defaults['desktop-large-portrait']));
$breakpointWidthLandscape = max($landscapePortraitWidth,
intval($useLocalBreakpoints ?
$slider->params->get('responsive-breakpoint-desktop-portrait-landscape',
ViewSettingsGeneral::defaults['desktop-large-landscape']) :
Settings::get('responsive-screen-width-desktop-portrait-landscape',
ViewSettingsGeneral::defaults['desktop-large-landscape'])));
$this->breakpoints[] = array(
'device' =>
'desktopLandscape',
'type' =>
'min-screen-width',
'portraitWidth' => $breakpointWidthPortrait,
'landscapeWidth' => $breakpointWidthLandscape
);
$editorWidth =
intval($slider->params->get('desktop-landscape-width',
1440));
if ($overrideSizeEnabled &&
$slider->params->get('slider-size-override-desktop-landscape',
0) && $editorWidth > 10) {
$customHeight = false;
$editorHeight =
intval($slider->params->get('desktop-landscape-height',
900));
if ($editorWidth < $breakpointWidthPortrait) {
if ($editorHeight > 0) {
$editorHeight = $breakpointWidthPortrait /
$editorWidth * $editorHeight;
}
$editorWidth = $breakpointWidthPortrait;
}
if ($editorHeight <= 0) {
switch
($this->slider->data->get('type', 'simple')) {
case 'carousel':
case 'showcase':
$editorHeight = 0;
break;
default:
$editorHeight = $editorWidth *
$heightHelperRatio;
}
} else {
$customHeight = true;
}
$this->sizes['desktopLandscape'] = array(
'width' => $editorWidth,
'height' => floor($editorHeight),
'customHeight' => $customHeight
);
} else {
$this->sizes['desktopLandscape'] = array(
'width' =>
$this->sizes['desktopPortrait']['width'],
'height' =>
$this->sizes['desktopPortrait']['height'],
'customHeight' => false
);
}
$this->sizes['desktopLandscape']['max']
= 3000;
$this->sizes['desktopLandscape']['min']
= $breakpointWidthPortrait;
$previousSize =
&$this->sizes['desktopLandscape'];
}
$this->sizes['desktopPortrait']['max'] =
max($this->sizes['desktopPortrait']['width'],
$landscapePortraitWidth - 1, $breakpointWidthLandscape - 1);
$previousSize = &$this->sizes['desktopPortrait'];
/**
* Keep a copy of the current smallest width to be able to disable
smaller devices
*/
$smallestWidth =
$this->sizes['desktopPortrait']['width'];
if ($this->enabledDevices['tabletLandscape']) {
$breakpointWidthPortrait = intval($useLocalBreakpoints ?
$slider->params->get('responsive-breakpoint-tablet-landscape',
ViewSettingsGeneral::defaults['tablet-large-portrait']) :
Settings::get('responsive-screen-width-tablet-landscape',
ViewSettingsGeneral::defaults['tablet-large-portrait']));
$breakpointWidthLandscape = max($breakpointWidthPortrait,
intval($useLocalBreakpoints ?
$slider->params->get('responsive-breakpoint-tablet-landscape-landscape',
ViewSettingsGeneral::defaults['tablet-large-landscape']) :
Settings::get('responsive-screen-width-tablet-landscape-landscape',
ViewSettingsGeneral::defaults['tablet-large-landscape'])));
$this->breakpoints[] = array(
'device' =>
'tabletLandscape',
'type' =>
'max-screen-width',
'portraitWidth' => $breakpointWidthPortrait,
'landscapeWidth' => $breakpointWidthLandscape
);
$editorWidth =
intval($slider->params->get('tablet-landscape-width',
1024));
if ($overrideSizeEnabled &&
$slider->params->get('slider-size-override-tablet-landscape',
0) && $editorWidth > 10) {
$customHeight = false;
$editorHeight =
intval($slider->params->get('tablet-landscape-height',
768));
if ($editorWidth > $breakpointWidthPortrait) {
if ($editorHeight > 0) {
$editorHeight = $breakpointWidthPortrait /
$editorWidth * $editorHeight;
}
$editorWidth = $breakpointWidthPortrait;
}
if ($editorHeight <= 0) {
$editorHeight = $editorWidth * $heightHelperRatio;
} else {
$customHeight = true;
}
$this->sizes['tabletLandscape'] = array(
'width' => $editorWidth,
'height' => floor($editorHeight),
'customHeight' => $customHeight
);
$smallestWidth = min($smallestWidth, $editorWidth);
} else {
$width = min($smallestWidth, $breakpointWidthPortrait);
$this->sizes['tabletLandscape'] = array(
'width' => $width,
'height' => floor($width *
$heightHelperRatio),
'auto' => true,
'customHeight' => false
);
$smallestWidth = min($smallestWidth,
$breakpointWidthPortrait);
}
$this->sizes['tabletLandscape']['max'] =
max($this->sizes['tabletLandscape']['width'],
$breakpointWidthPortrait, $breakpointWidthLandscape);
$previousSize['min'] =
min($previousSize['width'], $breakpointWidthPortrait + 1);
$previousSize =
&$this->sizes['tabletLandscape'];
}
if ($this->enabledDevices['tabletPortrait']) {
$breakpointWidthPortrait = intval($useLocalBreakpoints ?
$slider->params->get('responsive-breakpoint-tablet-portrait',
ViewSettingsGeneral::defaults['tablet-portrait']) :
Settings::get('responsive-screen-width-tablet-portrait',
ViewSettingsGeneral::defaults['tablet-portrait']));
$breakpointWidthLandscape = max($breakpointWidthPortrait,
intval($useLocalBreakpoints ?
$slider->params->get('responsive-breakpoint-tablet-portrait-landscape',
ViewSettingsGeneral::defaults['tablet-landscape']) :
Settings::get('responsive-screen-width-tablet-portrait-landscape',
ViewSettingsGeneral::defaults['tablet-landscape'])));
$this->breakpoints[] = array(
'device' =>
'tabletPortrait',
'type' =>
'max-screen-width',
'portraitWidth' => $breakpointWidthPortrait,
'landscapeWidth' => $breakpointWidthLandscape
);
$editorWidth =
intval($slider->params->get('tablet-portrait-width', 768));
if ($overrideSizeEnabled &&
$slider->params->get('slider-size-override-tablet-portrait',
0) && $editorWidth > 10) {
$customHeight = false;
$editorHeight =
intval($slider->params->get('tablet-portrait-height',
1024));
if ($editorWidth > $breakpointWidthPortrait) {
if ($editorHeight > 0) {
$editorHeight = $breakpointWidthPortrait /
$editorWidth * $editorHeight;
}
$editorWidth = $breakpointWidthPortrait;
}
if ($editorHeight <= 0) {
$editorHeight = $editorWidth * $heightHelperRatio;
} else {
$customHeight = true;
}
$this->sizes['tabletPortrait'] = array(
'width' => $editorWidth,
'height' => floor($editorHeight),
'customHeight' => $customHeight
);
$smallestWidth = min($smallestWidth, $editorWidth);
} else {
$width = min($smallestWidth, $breakpointWidthPortrait);
$this->sizes['tabletPortrait'] = array(
'width' => $width,
'height' => floor($width *
$heightHelperRatio),
'auto' => true,
'customHeight' => false
);
$smallestWidth = min($smallestWidth,
$breakpointWidthPortrait);
}
$this->sizes['tabletPortrait']['max'] =
max($this->sizes['tabletPortrait']['width'],
$breakpointWidthPortrait, $breakpointWidthLandscape);
$previousSize['min'] =
min($previousSize['width'], $breakpointWidthPortrait + 1);
$previousSize =
&$this->sizes['tabletPortrait'];
}
if ($this->enabledDevices['mobileLandscape']) {
$breakpointWidthPortrait = intval($useLocalBreakpoints ?
$slider->params->get('responsive-breakpoint-mobile-landscape',
ViewSettingsGeneral::defaults['mobile-large-portrait']) :
Settings::get('responsive-screen-width-mobile-landscape',
ViewSettingsGeneral::defaults['mobile-large-portrait']));
$breakpointWidthLandscape = max($breakpointWidthPortrait,
intval($useLocalBreakpoints ?
$slider->params->get('responsive-breakpoint-mobile-landscape-landscape',
ViewSettingsGeneral::defaults['mobile-large-landscape']) :
Settings::get('responsive-screen-width-mobile-landscape-landscape',
ViewSettingsGeneral::defaults['mobile-large-landscape'])));
$this->breakpoints[] = array(
'device' =>
'mobileLandscape',
'type' =>
'max-screen-width',
'portraitWidth' => $breakpointWidthPortrait,
'landscapeWidth' => $breakpointWidthLandscape
);
$editorWidth =
intval($slider->params->get('mobile-landscape-width',
568));
if ($overrideSizeEnabled &&
$slider->params->get('slider-size-override-mobile-landscape',
0) && $editorWidth > 10) {
$customHeight = false;
$editorHeight =
intval($slider->params->get('mobile-landscape-height',
320));
if ($editorWidth > $breakpointWidthPortrait) {
if ($editorHeight > 0) {
$editorHeight = $breakpointWidthPortrait /
$editorWidth * $editorHeight;
}
$editorWidth = $breakpointWidthPortrait;
}
if ($editorHeight <= 0) {
$editorHeight = $editorWidth * $heightHelperRatio;
} else {
$customHeight = true;
}
$this->sizes['mobileLandscape'] = array(
'width' => $editorWidth,
'height' => floor($editorHeight),
'customHeight' => $customHeight
);
$smallestWidth = min($smallestWidth, $editorWidth);
} else {
$width = min($smallestWidth, $breakpointWidthPortrait);
$this->sizes['mobileLandscape'] = array(
'width' => $width,
'height' => floor($width *
$heightHelperRatio),
'auto' => true,
'customHeight' => false
);
$smallestWidth = min($smallestWidth,
$breakpointWidthPortrait);
}
$this->sizes['mobileLandscape']['max'] =
max($this->sizes['mobileLandscape']['width'],
$breakpointWidthPortrait, $breakpointWidthLandscape);
$previousSize['min'] =
min($previousSize['width'], $breakpointWidthPortrait + 1);
$previousSize =
&$this->sizes['mobileLandscape'];
}
if ($this->enabledDevices['mobilePortrait']) {
$breakpointWidthPortrait = intval($useLocalBreakpoints ?
$slider->params->get('responsive-breakpoint-mobile-portrait',
ViewSettingsGeneral::defaults['mobile-portrait']) :
Settings::get('responsive-screen-width-mobile-portrait',
ViewSettingsGeneral::defaults['mobile-portrait']));
$breakpointWidthLandscape = max($breakpointWidthPortrait,
intval($useLocalBreakpoints ?
$slider->params->get('responsive-breakpoint-mobile-portrait-landscape',
ViewSettingsGeneral::defaults['mobile-landscape']) :
Settings::get('responsive-screen-width-mobile-portrait-landscape',
ViewSettingsGeneral::defaults['mobile-landscape'])));
$this->breakpoints[] = array(
'device' =>
'mobilePortrait',
'type' =>
'max-screen-width',
'portraitWidth' => $breakpointWidthPortrait,
'landscapeWidth' => $breakpointWidthLandscape
);
$editorWidth =
intval($slider->params->get('mobile-portrait-width', 320));
if ($overrideSizeEnabled &&
$slider->params->get('slider-size-override-mobile-portrait',
0) && $editorWidth > 10) {
$customHeight = false;
$editorHeight =
intval($slider->params->get('mobile-portrait-height',
568));
if ($editorWidth > $breakpointWidthPortrait) {
if ($editorHeight > 0) {
$editorHeight = $breakpointWidthPortrait /
$editorWidth * $editorHeight;
}
$editorWidth = $breakpointWidthPortrait;
}
if ($editorHeight <= 0) {
$editorHeight = $editorWidth * $heightHelperRatio;
} else {
$customHeight = true;
}
$this->sizes['mobilePortrait'] = array(
'width' => $editorWidth,
'height' => floor($editorHeight),
'customHeight' => $customHeight
);
} else {
$width = min(320, $smallestWidth,
$breakpointWidthPortrait);
$this->sizes['mobilePortrait'] = array(
'width' => $width,
'height' => floor($width *
$heightHelperRatio),
'customHeight' => false
);
}
$this->sizes['mobilePortrait']['max'] =
max($this->sizes['mobilePortrait']['width'],
$breakpointWidthPortrait, $breakpointWidthLandscape);
$previousSize['min'] =
min($previousSize['width'], $breakpointWidthPortrait + 1);
$previousSize =
&$this->sizes['mobilePortrait'];
}
$previousSize['min'] = min(320,
$previousSize['width']);
if
(isset($this->sizes['mobileLandscape']['auto'])) {
unset($this->sizes['mobileLandscape']['auto']);
$this->sizes['mobileLandscape']['width']
= $this->sizes['mobileLandscape']['min'];
$this->sizes['mobileLandscape']['height'] =
floor($this->sizes['mobileLandscape']['width'] *
$heightHelperRatio);
}
if
(isset($this->sizes['tabletPortrait']['auto'])) {
unset($this->sizes['tabletPortrait']['auto']);
$this->sizes['tabletPortrait']['width']
= $this->sizes['tabletPortrait']['min'];
$this->sizes['tabletPortrait']['height']
= floor($this->sizes['tabletPortrait']['width'] *
$heightHelperRatio);
}
if
(isset($this->sizes['tabletLandscape']['auto'])) {
unset($this->sizes['tabletLandscape']['auto']);
$this->sizes['tabletLandscape']['width']
= $this->sizes['tabletLandscape']['min'];
$this->sizes['tabletLandscape']['height'] =
floor($this->sizes['tabletLandscape']['width'] *
$heightHelperRatio);
}
$this->parseLimitSlideWidth($slider->params);
$breakpointData = array();
foreach ($this->breakpoints as $breakpoint) {
$breakpointData[$breakpoint['device']] = $breakpoint;
}
if (isset($breakpointData['desktopLandscape'])) {
$portraitMinWidth =
$breakpointData['desktopLandscape']['portraitWidth'];
$landscapeMinWidth =
$breakpointData['desktopLandscape']['landscapeWidth'];
if ($portraitMinWidth == $landscapeMinWidth) {
$this->mediaQueries['desktoplandscape'] =
array('(min-width: ' . $portraitMinWidth . 'px)');
} else {
$this->mediaQueries['desktoplandscape'] =
array(
'(orientation: landscape) and (min-width: ' .
$landscapeMinWidth . 'px)',
'(orientation: portrait) and (min-width: ' .
$portraitMinWidth . 'px)'
);
}
}
$nextSize = null;
foreach (array(
'tabletLandscape',
'tabletPortrait',
'mobileLandscape',
'mobilePortrait'
) as $nextDevice) {
if (isset($breakpointData[$nextDevice])) {
$nextSize = $breakpointData[$nextDevice];
break;
}
}
$portraitMaxWidth = 0;
$landscapeMaxWidth = 0;
if (isset($breakpointData['desktopLandscape'])) {
$portraitMaxWidth =
$breakpointData['desktopLandscape']['portraitWidth'] -
1;
$landscapeMaxWidth =
$breakpointData['desktopLandscape']['landscapeWidth'] -
1;
}
$portraitMinWidth = $nextSize['portraitWidth'] + 1;
$landscapeMinWidth = $nextSize['landscapeWidth'] + 1;
if ($portraitMaxWidth == 0 || $landscapeMaxWidth == 0) {
if ($portraitMinWidth == $landscapeMinWidth) {
$this->mediaQueries['desktopportrait'] =
array('(min-width: ' . $portraitMinWidth . 'px)');
} else {
$this->mediaQueries['desktopportrait'] =
array(
'(orientation: landscape) and (min-width: ' .
$landscapeMinWidth . 'px)',
'(orientation: portrait) and (min-width: ' .
$portraitMinWidth . 'px)'
);
}
} else {
if ($portraitMinWidth == $landscapeMinWidth &&
$portraitMaxWidth == $landscapeMaxWidth) {
$this->mediaQueries['desktopportrait'] =
array('(min-width: ' . $portraitMinWidth . 'px) and
(max-width: ' . $portraitMaxWidth . 'px)');
} else {
$this->mediaQueries['desktopportrait'] =
array(
'(orientation: landscape) and (min-width: ' .
$landscapeMinWidth . 'px) and (max-width: ' . $landscapeMaxWidth
. 'px)',
'(orientation: portrait) and (min-width: ' .
$portraitMinWidth . 'px) and (max-width: ' . $portraitMaxWidth .
'px)'
);
}
}
$this->initMediaQuery($breakpointData,
'tabletLandscape', array(
'tabletPortrait',
'mobileLandscape',
'mobilePortrait'
));
$this->initMediaQuery($breakpointData,
'tabletPortrait', array(
'mobileLandscape',
'mobilePortrait'
));
$this->initMediaQuery($breakpointData,
'mobileLandscape', array(
'mobilePortrait'
));
$this->initMediaQuery($breakpointData,
'mobilePortrait', array());
}
private function initMediaQuery(&$breakpointData, $deviceName,
$nextDevices) {
if (isset($breakpointData[$deviceName])) {
$deviceNameLower = strtolower($deviceName);
$nextSize = null;
foreach ($nextDevices as $nextDevice) {
if (isset($breakpointData[$nextDevice])) {
$nextSize = $breakpointData[$nextDevice];
break;
}
}
$portraitMaxWidth =
$breakpointData[$deviceName]['portraitWidth'];
$landscapeMaxWidth =
$breakpointData[$deviceName]['landscapeWidth'];
if ($nextSize) {
if ($nextSize['portraitWidth'] ==
$nextSize['landscapeWidth'] && $portraitMaxWidth ==
$landscapeMaxWidth) {
$this->mediaQueries[$deviceNameLower] =
array('(max-width: ' . $portraitMaxWidth . 'px) and
(min-width: ' . ($nextSize['portraitWidth'] + 1) .
'px)');
} else {
$this->mediaQueries[$deviceNameLower] = array(
'(orientation: landscape) and (max-width:
' . $landscapeMaxWidth . 'px) and (min-width: ' .
($nextSize['landscapeWidth'] + 1) . 'px)',
'(orientation: portrait) and (max-width:
' . $portraitMaxWidth . 'px) and (min-width: ' .
($nextSize['portraitWidth'] + 1) . 'px)'
);
}
} else {
if ($portraitMaxWidth == $landscapeMaxWidth) {
$this->mediaQueries[$deviceNameLower] =
array('(max-width: ' . $portraitMaxWidth . 'px)');
} else {
$this->mediaQueries[$deviceNameLower] = array(
'(orientation: landscape) and (max-width:
' . $landscapeMaxWidth . 'px)',
'(orientation: portrait) and (max-width:
' . $portraitMaxWidth . 'px)'
);
}
}
}
}
public function makeJavaScriptProperties(&$properties) {
if ($this->maximumSlideWidthLandscape <= 0) {
$this->maximumSlideWidthLandscape =
$this->maximumSlideWidth;
}
if ($this->maximumSlideWidthTablet <= 0) {
$this->maximumSlideWidthTablet =
$this->maximumSlideWidth;
}
if ($this->maximumSlideWidthTabletLandscape <= 0) {
$this->maximumSlideWidthTabletLandscape =
$this->maximumSlideWidthTablet;
}
if ($this->maximumSlideWidthMobile <= 0) {
$this->maximumSlideWidthMobile =
$this->maximumSlideWidth;
}
if ($this->maximumSlideWidthMobileLandscape <= 0) {
$this->maximumSlideWidthMobileLandscape =
$this->maximumSlideWidthMobile;
}
if (!$this->scaleDown) {
$this->slider->addDeviceCSS('all',
'div#' . $this->slider->elementId .
'-align{min-width:' .
$this->sizes['desktopPortrait']['width'] .
'px;}');
}
if (!$this->scaleUp) {
$this->slider->addDeviceCSS('all',
'div#' . $this->slider->elementId .
'-align{max-width:' .
$this->sizes['desktopPortrait']['width'] .
'px;}');
}
if ($this->minimumHeight) {
$this->slider->sliderType->handleSliderMinHeight($this->minimumHeight);
}
foreach ($this->mediaQueries as $device => $mediaQuery) {
if ($mediaQuery) {
$this->slider->addDeviceCSS($device, 'div#'
. $this->slider->elementId . ' [data-hide-' . $device .
'="1"]{display: none !important;}');
}
}
if (!$this->slider->isAdmin) {
if ($this->hideOnDesktopLandscape) {
$this->slider->addDeviceCSS('desktoplandscape',
'.n2-section-smartslider[data-ssid="' .
$this->slider->sliderId . '"]{display: none;}');
}
if (!SmartSlider3Info::$forceDesktop &&
$this->hideOnDesktopPortrait) {
$this->slider->addDeviceCSS('desktopportrait',
'.n2-section-smartslider[data-ssid="' .
$this->slider->sliderId . '"]{display: none;}');
}
if ($this->hideOnTabletLandscape) {
$this->slider->addDeviceCSS('tabletlandscape',
'.n2-section-smartslider[data-ssid="' .
$this->slider->sliderId . '"]{display: none;}');
}
if ($this->hideOnTabletPortrait) {
$this->slider->addDeviceCSS('tabletportrait',
'.n2-section-smartslider[data-ssid="' .
$this->slider->sliderId . '"]{display: none;}');
}
if ($this->hideOnMobileLandscape) {
$this->slider->addDeviceCSS('mobilelandscape',
'.n2-section-smartslider[data-ssid="' .
$this->slider->sliderId . '"]{display: none;}');
}
if ($this->hideOnMobilePortrait) {
$this->slider->addDeviceCSS('mobileportrait',
'.n2-section-smartslider[data-ssid="' .
$this->slider->sliderId . '"]{display: none;}');
}
}
$properties['responsive'] = array(
'mediaQueries' => $this->mediaQueries,
'base' =>
$this->slider->assets->base,
'hideOn' => array(
'desktopLandscape' =>
$this->hideOnDesktopLandscape,
'desktopPortrait' =>
SmartSlider3Info::$forceDesktop ? false : $this->hideOnDesktopPortrait,
'tabletLandscape' =>
$this->hideOnTabletLandscape,
'tabletPortrait' =>
$this->hideOnTabletPortrait,
'mobileLandscape' =>
$this->hideOnMobileLandscape,
'mobilePortrait' =>
$this->hideOnMobilePortrait,
),
'onResizeEnabled' =>
$this->onResizeEnabled,
'type' => $this->type,
'sliderHeightBasedOn' =>
$this->sliderHeightBasedOn,
'focusUser' => $this->focusUser,
'focusEdge' => $this->focusEdge,
'breakpoints' => $this->breakpoints,
'enabledDevices' => $this->enabledDevices,
'sizes' => $this->sizes,
'overflowHiddenPage' =>
intval($this->slider->params->get('overflow-hidden-page',
0))
);
}
/**
* @param Data $params
*/
private function parseLimitSlideWidth($params) {
if ($params->get('responsiveLimitSlideWidth', 1)) {
if ($this->enabledDevices['desktopLandscape']) {
if
($params->get('responsiveSlideWidthDesktopLandscape', 0)) {
$this->maximumSlideWidthLandscape =
intval($params->get('responsiveSlideWidthMaxDesktopLandscape',
1600));
$this->slider->addDeviceCSS('desktoplandscape',
'div#' . $this->slider->elementId . '
.n2-ss-slide-limiter{max-width:' .
$this->maximumSlideWidthLandscape . 'px;}');
}
}
if ($params->get('responsiveSlideWidth', 0)) {
$this->maximumSlideWidth =
intval($params->get('responsiveSlideWidthMax', 3000));
} else {
$this->maximumSlideWidth =
$this->sizes['desktopPortrait']['width'];
}
if ($this->maximumSlideWidth < 1) {
$this->maximumSlideWidth = 10000;
}
$this->slider->addDeviceCSS('all',
'div#' . $this->slider->elementId . '
.n2-ss-slide-limiter{max-width:' . $this->maximumSlideWidth .
'px;}');
if ($this->enabledDevices['tabletLandscape']) {
if
($params->get('responsiveSlideWidthTabletLandscape', 0)) {
$this->maximumSlideWidthTabletLandscape =
intval($params->get('responsiveSlideWidthMaxTabletLandscape',
1200));
$this->slider->addDeviceCSS('tabletlandscape',
'div#' . $this->slider->elementId . '
.n2-ss-slide-limiter{max-width:' .
$this->maximumSlideWidthTabletLandscape . 'px;}');
}
}
if ($params->get('responsiveSlideWidthTablet', 0))
{
$this->maximumSlideWidthTablet =
intval($params->get('responsiveSlideWidthMaxTablet', 980));
$this->slider->addDeviceCSS('tabletportrait',
'div#' . $this->slider->elementId . '
.n2-ss-slide-limiter{max-width:' . $this->maximumSlideWidthTablet .
'px;}');
}
if ($this->enabledDevices['mobileLandscape']) {
if
($params->get('responsiveSlideWidthMobileLandscape', 0)) {
$this->maximumSlideWidthMobileLandscape =
intval($params->get('responsiveSlideWidthMaxMobileLandscape',
780));
$this->slider->addDeviceCSS('mobilelandscape',
'div#' . $this->slider->elementId . '
.n2-ss-slide-limiter{max-width:' .
$this->maximumSlideWidthMobileLandscape . 'px;}');
}
}
if ($params->get('responsiveSlideWidthMobile', 0))
{
$this->maximumSlideWidthMobile =
intval($params->get('responsiveSlideWidthMaxMobile', 480));
$this->slider->addDeviceCSS('mobileportrait',
'div#' . $this->slider->elementId . '
.n2-ss-slide-limiter{max-width:' . $this->maximumSlideWidthMobile .
'px;}');
}
}
}
}PK:e�[�]�-MM"Slider/Feature/SlideBackground.phpnu�[���<?php
namespace Nextend\SmartSlider3\Slider\Feature;
use Nextend\Framework\Image\ImageEdit;
use Nextend\Framework\Image\ImageManager;
use Nextend\Framework\Parser\Color;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Slider\Slide;
use Nextend\SmartSlider3\Slider\Slider;
class SlideBackground {
/**
* @var Slider
*/
private $slider;
public function __construct($slider) {
$this->slider = $slider;
}
public function makeJavaScriptProperties(&$properties) {
$enabled =
intval($this->slider->params->get('slide-background-parallax',
0));
if ($enabled) {
$properties['backgroundParallax'] = array(
'strength' =>
intval($this->slider->params->get('slide-background-parallax-strength',
50)) / 100,
'tablet' =>
intval($this->slider->params->get('bg-parallax-tablet',
0)),
'mobile' =>
intval($this->slider->params->get('bg-parallax-mobile',
0))
);
}
}
/**
* @param $slide Slide
*
* @return string
*/
public function make($slide) {
if ($slide->parameters->get('background-type') ==
'') {
$slide->parameters->set('background-type',
'color');
if
($slide->parameters->get('backgroundVideoMp4')) {
$slide->parameters->set('background-type',
'video');
} else if
($slide->parameters->get('backgroundImage')) {
$slide->parameters->set('background-type',
'image');
}
}
return $this->makeBackground($slide);
}
private function getBackgroundStyle($slide) {
$style = '';
$color =
$slide->fill($slide->parameters->get('backgroundColor',
''));
if (empty($color)) {
$color = 'ffffff00';
}
if (strlen($color) > 0 && $color[0] == '#') {
$color = substr($color, 1);
if (strlen($color) == 6) {
$color .= 'ff';
}
}
$gradient =
$slide->parameters->get('backgroundGradient',
'off');
if ($gradient != 'off') {
$colorEnd =
$slide->fill($slide->parameters->get('backgroundColorEnd',
'ffffff00'));
if (empty($colorEnd)) {
$colorEnd = 'ffffff00';
}
if ($colorEnd[0] == '#') {
$colorEnd = substr($colorEnd, 1);
if (strlen($colorEnd) == 6) {
$colorEnd .= 'ff';
}
}
switch ($gradient) {
case 'horizontal':
$style .= 'background:linear-gradient(to right,
' . Color::colorToRGBA($color) . ' 0%,' .
Color::colorToRGBA($colorEnd) . ' 100%);';
break;
case 'vertical':
$style .= 'background:linear-gradient(to bottom,
' . Color::colorToRGBA($color) . ' 0%,' .
Color::colorToRGBA($colorEnd) . ' 100%);';
break;
case 'diagonal1':
$style .= 'background:linear-gradient(45deg,
' . Color::colorToRGBA($color) . ' 0%,' .
Color::colorToRGBA($colorEnd) . ' 100%);';
break;
case 'diagonal2':
$style .= 'background:linear-gradient(135deg,
' . Color::colorToRGBA($color) . ' 0%,' .
Color::colorToRGBA($colorEnd) . ' 100%);';
break;
}
} else {
if (strlen($color) == 8) {
$alpha = substr($color, 6, 2);
if ($alpha != '00') {
$style = 'background-color: #' .
substr($color, 0, 6) . ';';
if ($alpha != 'ff') {
$style .= "background-color: " .
Color::colorToRGBA($color) . ";";
}
}
}
}
return $style;
}
private function makeBackground($slide) {
$backgroundType =
$slide->parameters->get('background-type');
if (empty($backgroundType)) {
$backgroundVideoMp4 =
$slide->parameters->get('backgroundVideoMp4',
'');
$backgroundImage =
$slide->parameters->get('backgroundImage', '');
if (!empty($backgroundVideoMp4)) {
$backgroundType = 'video';
} else if (!empty($backgroundImage)) {
$backgroundType = 'image';
} else {
$backgroundType = 'color';
}
}
$fillMode =
$slide->parameters->get('backgroundMode',
'default');
if ($fillMode == 'default') {
$fillMode =
$this->slider->params->get('backgroundMode',
'fill');
}
$backgroundElements = array();
if ($backgroundType == 'color') {
$backgroundElements[] = $this->renderColor($slide);
} else if ($backgroundType == 'video') {
$backgroundElements[] =
$this->renderBackgroundVideo($slide);
$backgroundElements[] = $this->renderImage($slide,
$fillMode);
$backgroundElements[] = $this->renderColor($slide);
} else if ($backgroundType == 'image') {
$backgroundElements[] = $this->renderImage($slide,
$fillMode);
$backgroundElements[] = $this->renderColor($slide);
}
$html = implode('', $backgroundElements);
/* @see
https://bugs.chromium.org/p/chromium/issues/detail?id=1181291
* if (!$slide->getFrontendFirst()) {
* $html = '<template>' . $html .
'</template>';
* }
*/
return Html::tag('div', array(
'class' =>
"n2-ss-slide-background",
'data-public-id' => $slide->publicID,
'data-mode' => $fillMode
), $html);
}
private function renderColor($slide) {
$backgroundColorStyle = $this->getBackgroundStyle($slide);
if (!empty($backgroundColorStyle)) {
$attributes = array(
'class' =>
'n2-ss-slide-background-color',
"style" => $backgroundColorStyle
);
if
($slide->parameters->get('backgroundColorOverlay', 0)) {
$attributes['data-overlay'] = 1;
}
return Html::tag('div', $attributes, '');
}
return '';
}
/**
* @param $slide Slide
* @param $fillMode
*
* @return string
*/
private function renderImage($slide, $fillMode) {
$rawBackgroundImage =
$slide->parameters->get('backgroundImage', '');
if (empty($rawBackgroundImage)) {
return '';
}
$backgroundImageBlur = max(0,
$slide->parameters->get('backgroundImageBlur', 0));
$focusX = max(0, min(100,
$slide->fill($slide->parameters->get('backgroundFocusX',
50))));
$focusY = max(0, min(100,
$slide->fill($slide->parameters->get('backgroundFocusY',
50))));
$backgroundImageMobile = '';
$backgroundImageTablet = '';
$backgroundImageDesktopRetina = '';
$backgroundImage =
$slide->fill($rawBackgroundImage);
if (!$slide->hasGenerator()) {
$imageData =
ImageManager::getImageData($backgroundImage);
$backgroundImageDesktopRetina =
$imageData['desktop-retina']['image'];
$backgroundImageMobile =
$imageData['mobile']['image'];
$backgroundImageTablet =
$imageData['tablet']['image'];
}
$alt =
$slide->fill($slide->parameters->get('backgroundAlt',
''));
$title =
$slide->fill($slide->parameters->get('backgroundTitle',
''));
$opacity = min(100, max(0,
$slide->parameters->get('backgroundImageOpacity', 100)));
$style = array();
if ($opacity < 100) {
$style[] = 'opacity:' . ($opacity / 100);
}
if ($focusX != '50') {
$style[] = '--ss-o-pos-x:' . $focusX . '%';
}
if ($focusY != '50') {
$style[] = '--ss-o-pos-y:' . $focusY . '%';
}
$attributes = array(
"class" =>
'n2-ss-slide-background-image',
"data-blur" => $backgroundImageBlur,
"data-alt" => $alt,
"data-title" => $title
);
if (!empty($style)) {
$attributes['style'] = implode(';',
$style);
}
if ($slide->isCurrentlyEdited()) {
$attributes['data-opacity'] = $opacity;
$attributes['data-x'] = $focusX;
$attributes['data-y'] = $focusY;
}
$sources = array();
if ($this->slider->isAdmin) {
$src = $backgroundImage;
$attributes['data-hash'] = md5($src);
$attributes['data-src-desktop'] = $src;
$attributes['data-src-desktop-retina'] =
$backgroundImageDesktopRetina;
$attributes['data-src-tablet'] =
$backgroundImageTablet;
$attributes['data-src-mobile'] =
$backgroundImageMobile;
} else {
if (empty($backgroundImage)) {
/**
* @todo Does it really work as expected?
*/
$src = ImageEdit::base64Transparent();
} else {
/**
* @todo this resize might have a better place
*/
$src = $backgroundImage;
if
($this->slider->params->get('optimize-webp', 0)) {
$src =
ResourceTranslator::urlToResource($this->slider->features->optimize->optimizeBackground($backgroundImage,
$focusX, $focusY));
}
$slide->addImage(ResourceTranslator::toUrl($src));
}
$hasDeviceSpecificImage = false;
$mediaQueries =
$this->slider->features->responsive->mediaQueries;
if (!empty($backgroundImageDesktopRetina)) {
$hasDeviceSpecificImage = true;
$backgroundImageDesktopRetina =
ResourceTranslator::toUrl($backgroundImageDesktopRetina);
$mediaQueryMinPixelRatio = ' and
(-webkit-min-device-pixel-ratio: 1.5)';
if (!empty($mediaQueries['desktopportrait'])) {
$sources[] = HTML::tag('source',
Html::addExcludeLazyLoadAttributes(array(
'srcset' =>
$backgroundImageDesktopRetina,
'media' =>
implode($mediaQueryMinPixelRatio . ',',
$mediaQueries['desktopportrait']) . $mediaQueryMinPixelRatio
)));
}
if (!empty($mediaQueries['desktopLandscape'])) {
$sources[] = HTML::tag('source',
Html::addExcludeLazyLoadAttributes(array(
'srcset' =>
$backgroundImageDesktopRetina,
'media' =>
implode($mediaQueryMinPixelRatio . ',',
$mediaQueries['desktopLandscape']) . $mediaQueryMinPixelRatio
)));
}
}
if (!empty($backgroundImageMobile)) {
$hasDeviceSpecificImage = true;
$backgroundImageMobileUrl =
ResourceTranslator::toUrl($backgroundImageMobile);
if (!empty($mediaQueries['mobileportrait'])) {
$sources[] = HTML::tag('source',
Html::addExcludeLazyLoadAttributes(array(
'srcset' => $backgroundImageMobileUrl,
'media' => implode(',',
$mediaQueries['mobileportrait'])
)));
}
if (!empty($mediaQueries['mobilelandscape'])) {
$sources[] = HTML::tag('source',
Html::addExcludeLazyLoadAttributes(array(
'srcset' => $backgroundImageMobileUrl,
'media' => implode(',',
$mediaQueries['mobilelandscape'])
)));
}
}
if (!empty($backgroundImageTablet)) {
$hasDeviceSpecificImage = true;
$backgroundImageTabletUrl =
ResourceTranslator::toUrl($backgroundImageTablet);
if (!empty($mediaQueries['tabletportrait'])) {
$sources[] = HTML::tag('source',
Html::addExcludeLazyLoadAttributes(array(
'srcset' => $backgroundImageTabletUrl,
'media' => implode(',',
$mediaQueries['tabletportrait'])
)));
}
if (!empty($mediaQueries['tabletlandscape'])) {
$sources[] = HTML::tag('source',
Html::addExcludeLazyLoadAttributes(array(
'srcset' => $backgroundImageTabletUrl,
'media' => implode(',',
$mediaQueries['tabletlandscape'])
)));
}
}
if (!$hasDeviceSpecificImage) {
$retinaSupport =
!!$this->slider->params->get('optimize-slide-width-retina',
0);
$optimizedData =
$this->slider->features->optimize->optimizeImageWebP($backgroundImage,
array(
'optimize' =>
$this->slider->params->get('optimize-webp', 0),
'quality' =>
intval($this->slider->params->get('optimize-quality',
70)),
'resize' =>
$this->slider->params->get('optimize-scale', 0),
'defaultWidth' =>
intval($this->slider->params->get('optimize-slide-width-normal',
1920)),
'mediumWidth' =>
intval($this->slider->params->get('optimize-slide-width-tablet',
1200)),
'mediumHeight' =>
intval($this->slider->params->get('optimize-slide-height-tablet',
0)),
'smallWidth' =>
intval($this->slider->params->get('optimize-slide-width-mobile',
500)),
'smallHeight' =>
intval($this->slider->params->get('optimize-slide-height-mobile',
0)),
'focusX' => $focusX,
'focusY' => $focusY,
'compressOriginal' => $retinaSupport
));
if ($retinaSupport) {
$webPSrcSet = array();
if (isset($optimizedData['small'])) {
$slide->addImage($optimizedData['small']['src']);
$webPSrcSet[] =
$optimizedData['small']['src'] . ' ' .
$optimizedData['small']['width'] . 'w';
}
if (isset($optimizedData['medium'])) {
$slide->addImage($optimizedData['medium']['src']);
$webPSrcSet[] =
$optimizedData['medium']['src'] . ' ' .
$optimizedData['medium']['width'] . 'w';
}
if (isset($optimizedData['normal'])) {
$slide->addImage($optimizedData['normal']['src']);
$webPSrcSet[] =
$optimizedData['normal']['src'] . ' ' .
$optimizedData['normal']['width'] . 'w';
}
if (isset($optimizedData['original'])) {
$slide->addImage($optimizedData['original']['src']);
$webPSrcSet[] =
$optimizedData['original']['src'] . ' ' .
$optimizedData['original']['width'] . 'w';
}
if (!empty($webPSrcSet)) {
$sources[] = HTML::tag('source',
Html::addExcludeLazyLoadAttributes(array(
'srcset' => implode(',',
$webPSrcSet),
'type' => 'image/webp'
)));
}
} else {
if (isset($optimizedData['small'])) {
$slide->addImage($optimizedData['small']['src']);
$sources[] = HTML::tag('source',
Html::addExcludeLazyLoadAttributes(array(
'srcset' =>
$optimizedData['small']['src'],
'type' =>
'image/webp',
'media' => '(max-width:
' . $optimizedData['small']['width'] .
'px)'
)));
}
if (isset($optimizedData['medium'])) {
$slide->addImage($optimizedData['medium']['src']);
$sources[] = HTML::tag('source',
Html::addExcludeLazyLoadAttributes(array(
'srcset' =>
$optimizedData['medium']['src'],
'type' =>
'image/webp',
'media' => '(max-width:
' . $optimizedData['medium']['width'] .
'px)'
)));
}
if (isset($optimizedData['normal'])) {
$slide->addImage($optimizedData['normal']['src']);
$sources[] = HTML::tag('source',
Html::addExcludeLazyLoadAttributes(array(
'srcset' =>
$optimizedData['normal']['src'],
'type' => 'image/webp'
)));
}
}
}
}
$imageAttributes = array(
'src' => ResourceTranslator::toUrl($src),
'alt' => $alt,
'title' => $title,
'loading' => 'lazy',
'style' => ''
);
$imageAttributes =
Html::addExcludeLazyLoadAttributes($imageAttributes);
$sources[] = Html::tag('img', $imageAttributes,
'', false);
$picture = '<picture>' . implode('',
$sources) . '</picture>';
$originalImage = Html::tag('div', $attributes, $picture);
if ($fillMode === 'blurfit') {
$picture = '<picture
style="filter:blur(7px)">' . implode('',
$sources) . '</picture>';
if (!isset($attributes['style'])) {
$attributes['style'] = '';
}
$attributes['style'] .=
'margin:-14px;padding:14px;';
$ret = Html::tag('div', $attributes, $picture) .
$originalImage;
} else {
$ret = $originalImage;
}
return $ret;
}
/**
* @param Slide $slide
*
* @return string
*/
private function renderBackgroundVideo($slide) {
$mp4 =
ResourceTranslator::toUrl($slide->fill($slide->parameters->get('backgroundVideoMp4',
'')));
if (empty($mp4)) {
return '';
}
$sources = '';
if ($mp4) {
$sources .= Html::tag("source", array(
"src" => $mp4,
"type" => "video/mp4"
), '', false);
}
$opacity = min(100, max(0,
$slide->parameters->get('backgroundVideoOpacity', 100)));
$attributes = array(
'class' =>
'n2-ss-slide-background-video intrinsic-ignore',
'style' => 'opacity:' .
($opacity / 100) . ';',
'data-mode' =>
$slide->parameters->get('backgroundVideoMode',
'fill'),
'playsinline' => 1,
'webkit-playsinline' => 1,
'onloadstart' =>
'this.n2LoadStarted=1;',
'data-keepplaying' => 1,
'preload' => 'none'
);
if ($slide->parameters->get('backgroundVideoMuted',
1)) {
$attributes['muted'] = 'muted';
}
if ($slide->parameters->get('backgroundVideoLoop',
1)) {
$attributes['loop'] = 'loop';
}
if ($slide->parameters->get('backgroundVideoReset',
1)) {
$attributes['data-reset-slide-change'] = 1;
}
return Html::tag('video', $attributes, $sources);
return '';
}
}PK:e�[�Ҋ�Slider/Feature/TranslateUrl.phpnu�[���<?php
namespace Nextend\SmartSlider3\Slider\Feature;
use Nextend\Framework\Parser\Common;
use Nextend\SmartSlider3\Settings;
class TranslateUrl {
private $slider;
public $from = '';
public $to = '';
public function __construct($slider) {
$this->slider = $slider;
list($this->from, $this->to) =
(array)Common::parse(Settings::get('translate-url',
'||'));
}
public function renderSlider($sliderHTML) {
if (!$this->slider->isAdmin && !empty($this->from)
&& !empty($this->to)) {
return str_replace($this->from, $this->to, $sliderHTML);
}
return $sliderHTML;
}
}PK:e�[�
����Slider/FeatureManager.phpnu�[���<?php
namespace Nextend\SmartSlider3\Slider;
use Nextend\Framework\Asset\Predefined;
use Nextend\SmartSlider3\Renderable\AbstractRenderable;
use Nextend\SmartSlider3\Slider\Feature\Align;
use Nextend\SmartSlider3\Slider\Feature\Autoplay;
use Nextend\SmartSlider3\Slider\Feature\BlockRightClick;
use Nextend\SmartSlider3\Slider\Feature\Controls;
use Nextend\SmartSlider3\Slider\Feature\Focus;
use Nextend\SmartSlider3\Slider\Feature\LayerMode;
use Nextend\SmartSlider3\Slider\Feature\LazyLoad;
use Nextend\SmartSlider3\Slider\Feature\MaintainSession;
use Nextend\SmartSlider3\Slider\Feature\Margin;
use Nextend\SmartSlider3\Slider\Feature\Optimize;
use Nextend\SmartSlider3\Slider\Feature\PostBackgroundAnimation;
use Nextend\SmartSlider3\Slider\Feature\Responsive;
use Nextend\SmartSlider3\Slider\Feature\SlideBackground;
use Nextend\SmartSlider3\Slider\Feature\TranslateUrl;
class FeatureManager {
/**
* @var AbstractRenderable
*/
private $slider;
/**
* @var Responsive
*/
public $responsive;
/**
* @var Controls
*/
public $controls;
/**
* @var LazyLoad
*/
public $lazyLoad;
/**
* @var Align
*/
public $align;
/**
* @var BlockRightClick
*/
public $blockRightClick;
/**
* @var Autoplay
*/
public $autoplay;
/**
* @var TranslateUrl
*/
public $translateUrl;
/**
* @var LayerMode
*/
public $layerMode;
/**
* @var SlideBackground
*/
public $slideBackground;
/**
* @var PostBackgroundAnimation
*/
public $postBackgroundAnimation;
/**
* @var Focus
*/
public $focus;
/**
* @var MaintainSession
*/
public $maintainSession;
/**
* @var Margin
*/
public $margin;
public $optimize;
/**
* FeatureManager constructor.
*
* @param $slider AbstractRenderable
*/
public function __construct($slider) {
$this->slider = $slider;
$this->optimize = new Optimize($slider);
$this->align = new Align($slider);
$this->responsive = new Responsive($slider, $this);
$this->controls = new Controls($slider);
$this->lazyLoad = new LazyLoad($slider);
$this->margin = new Margin($slider);
$this->blockRightClick = new BlockRightClick($slider);
$this->maintainSession = new MaintainSession($slider);
$this->autoplay = new Autoplay($slider);
$this->translateUrl = new TranslateUrl($slider);
$this->layerMode = new LayerMode($slider);
$this->slideBackground = new SlideBackground($slider);
$this->focus = new Focus($slider);
$this->postBackgroundAnimation = new
PostBackgroundAnimation($slider);
}
public function generateJSProperties() {
$return = array(
'admin' =>
$this->slider->isAdmin,
'callbacks' =>
$this->slider->params->get('callbacks', ''),
'background.video.mobile' =>
intval($this->slider->params->get('slides-background-video-mobile',
1))
);
$randomizeCache =
$this->slider->params->get('randomize-cache', 0);
if (!$this->slider->isAdmin && $randomizeCache) {
$return['randomize'] = array(
'randomize' =>
intval($this->slider->params->get('randomize', 0)),
'randomizeFirst' =>
intval($this->slider->params->get('randomizeFirst', 0))
);
}
$enabled =
$this->slider->params->get('global-lightbox', 0);
if ($enabled) {
Predefined::loadLiteBox();
$this->slider->exposeSlideData['lightboxImage']
= true;
$label =
$this->slider->params->get('global-lightbox-label', 0);
$return['plugins']['lightbox'] = array(
'label' => $label
);
switch ($label) {
case 'namemore':
$this->slider->exposeSlideData['description'] = true;
break;
}
}
$return['alias'] = array(
'id' =>
intval($this->slider->params->get('alias-id', 0)),
'smoothScroll' =>
intval($this->slider->params->get('alias-smoothscroll',
0)),
'slideSwitch' =>
intval($this->slider->params->get('alias-slideswitch',
0)),
'scroll' =>
intval($this->slider->params->get('alias-slideswitch-scroll',
1))
);
$this->makeJavaScriptProperties($return);
return $return;
}
protected function makeJavaScriptProperties(&$properties) {
$this->align->makeJavaScriptProperties($properties);
$this->responsive->makeJavaScriptProperties($properties);
$this->controls->makeJavaScriptProperties($properties);
$this->optimize->makeJavaScriptProperties($properties);
$this->lazyLoad->makeJavaScriptProperties($properties);
$this->blockRightClick->makeJavaScriptProperties($properties);
$this->maintainSession->makeJavaScriptProperties($properties);
$this->autoplay->makeJavaScriptProperties($properties);
$this->layerMode->makeJavaScriptProperties($properties);
$this->slideBackground->makeJavaScriptProperties($properties);
$this->focus->makeJavaScriptProperties($properties);
$this->postBackgroundAnimation->makeJavaScriptProperties($properties);
$properties['initCallbacks'] =
&$this->slider->initCallbacks;
}
/**
* @param $slide Slide
*/
public function makeSlide($slide) {
$this->postBackgroundAnimation->makeSlide($slide);
}
/**
* @param $slide Slide
*
* @return string
*/
public function makeBackground($slide) {
return $this->slideBackground->make($slide);
}
public function addInitCallback($callback, $name = false) {
$this->slider->addScript($callback, $name);
}
}PK:e�[SJ����
Slider/Joomla/PlatformSlider.phpnu�[���<?php
namespace Nextend\SmartSlider3\Slider\Joomla;
use Nextend\SmartSlider3\Platform\Joomla\JoomlaShim;
use Nextend\SmartSlider3\Slider\Base\PlatformSliderBase;
use stdClass;
class PlatformSlider extends PlatformSliderBase {
public $_module;
public function addCMSFunctions($text) {
$params = new stdclass();
$article = new stdClass;
$article->text = '<div>' . $text .
'</div>';
$data = array(
'mod_smartslider',
&$article,
&$params,
0
);
JoomlaShim::triggerOnContentPrepare($data);
return $article->text;
}
}PK:e�[=HJ���0Slider/ResponsiveType/AbstractResponsiveType.phpnu�[���<?php
namespace Nextend\SmartSlider3\Slider\ResponsiveType;
use Nextend\SmartSlider3\Slider\Feature\Responsive;
abstract class AbstractResponsiveType {
public abstract function getName();
/**
* @param Responsive $responsive
*
* @return AbstractResponsiveTypeFrontend
*/
public abstract function createFrontend($responsive);
/**
*
* @return AbstractResponsiveTypeAdmin
*/
public abstract function createAdmin();
}PK:e�[���.��5Slider/ResponsiveType/AbstractResponsiveTypeAdmin.phpnu�[���<?php
namespace Nextend\SmartSlider3\Slider\ResponsiveType;
use Nextend\Framework\Form\ContainerInterface;
use Nextend\Framework\Pattern\GetPathTrait;
use Nextend\Framework\Pattern\OrderableTrait;
abstract class AbstractResponsiveTypeAdmin {
use GetPathTrait;
use OrderableTrait;
/** @var AbstractResponsiveType */
protected $type;
public function __construct($type) {
$this->type = $type;
}
public function getName() {
return $this->type->getName();
}
/**
* @return string
*/
public abstract function getIcon();
public abstract function getLabel();
/**
* @param ContainerInterface $container
*/
public function renderFields($container) {
}
}PK:e�[��BB8Slider/ResponsiveType/AbstractResponsiveTypeFrontend.phpnu�[���<?php
namespace Nextend\SmartSlider3\Slider\ResponsiveType;
use Nextend\SmartSlider3\Slider\Feature\Responsive;
abstract class AbstractResponsiveTypeFrontend {
/** @var AbstractResponsiveType */
protected $type;
/**
* @var Responsive
*/
protected $responsive;
public function __construct($type, $responsive) {
$this->type = $type;
$this->responsive = $responsive;
}
public function getType() {
return $this->type->getName();
}
public function parse($params, $responsive, $features) {
}
}PK:e�[�/���1Slider/ResponsiveType/Auto/ResponsiveTypeAuto.phpnu�[���<?php
namespace Nextend\SmartSlider3\Slider\ResponsiveType\Auto;
use Nextend\SmartSlider3\Slider\ResponsiveType\AbstractResponsiveType;
class ResponsiveTypeAuto extends AbstractResponsiveType {
public function getName() {
return 'auto';
}
public function createFrontend($responsive) {
return new ResponsiveTypeAutoFrontend($this, $responsive);
}
public function createAdmin() {
return new ResponsiveTypeAutoAdmin($this);
}
}PK:e�[����6Slider/ResponsiveType/Auto/ResponsiveTypeAutoAdmin.phpnu�[���<?php
namespace Nextend\SmartSlider3\Slider\ResponsiveType\Auto;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Text\Number;
use Nextend\Framework\Form\Fieldset\FieldsetRow;
use Nextend\SmartSlider3\Slider\ResponsiveType\AbstractResponsiveTypeAdmin;
class ResponsiveTypeAutoAdmin extends AbstractResponsiveTypeAdmin {
protected $ordering = 1;
public function getLabel() {
return n2_('Boxed');
}
public function getIcon() {
return 'ssi_64 ssi_64--auto';
}
public function renderFields($container) {
$row1 = new FieldsetRow($container, 'responsive-auto-1');
new OnOff($row1, 'responsiveScaleDown',
n2_('Downscale'), 1, array(
'tipLabel' => n2_('Downscale'),
'tipDescription' => n2_('Allows the slider to
scale down for smaller screens.')
));
new OnOff($row1, 'responsiveScaleUp',
n2_('Upscale'), 1, array(
'tipLabel' => n2_('Upscale'),
'tipDescription' => n2_('Allows the slider to
scale up for larger screens.')
));
new Number($row1, 'responsiveSliderHeightMin',
n2_('Min height'), 0, array(
'wide' => 5,
'unit' => 'px',
'tipLabel' => n2_('Min height'),
'tipDescription' => n2_('Prevents the slider
from getting smaller than the set value.')
));
}
}PK:e�[|W b||9Slider/ResponsiveType/Auto/ResponsiveTypeAutoFrontend.phpnu�[���<?php
namespace Nextend\SmartSlider3\Slider\ResponsiveType\Auto;
use
Nextend\SmartSlider3\Slider\ResponsiveType\AbstractResponsiveTypeFrontend;
class ResponsiveTypeAutoFrontend extends AbstractResponsiveTypeFrontend {
public function parse($params, $responsive, $features) {
$responsive->scaleDown =
intval($params->get('responsiveScaleDown', 1));
$responsive->scaleUp =
intval($params->get('responsiveScaleUp', 1));
if ($responsive->scaleUp) {
$features->align->align = 'normal';
}
$responsive->minimumHeight =
intval($params->get('responsiveSliderHeightMin', 0));
}
}PK:e�[?��.��;Slider/ResponsiveType/FullWidth/ResponsiveTypeFullWidth.phpnu�[���<?php
namespace Nextend\SmartSlider3\Slider\ResponsiveType\FullWidth;
use Nextend\SmartSlider3\Slider\ResponsiveType\AbstractResponsiveType;
class ResponsiveTypeFullWidth extends AbstractResponsiveType {
public function getName() {
return 'fullwidth';
}
public function createFrontend($responsive) {
return new ResponsiveTypeFullWidthFrontend($this, $responsive);
}
public function createAdmin() {
return new ResponsiveTypeFullWidthAdmin($this);
}
}PK:e�[�X @Slider/ResponsiveType/FullWidth/ResponsiveTypeFullWidthAdmin.phpnu�[���<?php
namespace Nextend\SmartSlider3\Slider\ResponsiveType\FullWidth;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Element\Text\Number;
use Nextend\Framework\Form\Fieldset\FieldsetRow;
use Nextend\SmartSlider3\Slider\ResponsiveType\AbstractResponsiveTypeAdmin;
class ResponsiveTypeFullWidthAdmin extends AbstractResponsiveTypeAdmin {
protected $ordering = 2;
public function getLabel() {
return n2_('Full width');
}
public function getIcon() {
return 'ssi_64 ssi_64--fit';
}
public function renderFields($container) {
$row1 = new FieldsetRow($container,
'responsive-fullwidth-1');
new Number($row1, 'responsiveSliderHeightMin',
n2_('Min height'), 0, array(
'unit' => 'px',
'wide' => 5,
'tipLabel' => n2_('Min height'),
'tipDescription' => n2_('Prevents the slider
from getting smaller than the set value.')
));
new OnOff($row1, 'responsiveForceFull', n2_('Force
full width'), 1, array(
'tipLabel' => n2_('Force full
width'),
'tipDescription' => n2_('The slider tries to
fill the full width of the browser.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1776-fullwidth-layout#force-full-width'
));
new Select($row1, 'responsiveForceFullOverflowX',
n2_('Overflow-X'), 'body', array(
'options' => array(
'body' => 'body',
'html' => 'html',
'none' => n2_('None')
),
'tipLabel' => n2_('Overflow-X'),
'tipDescription' => n2_('Prevents the
vertical scrollbar from appear during certain slide background
animations.')
));
new Text($row1, 'responsiveForceFullHorizontalSelector',
n2_('Adjust slider width to'), 'body', array(
'tipLabel' => n2_('Adjust slider width
to'),
'tipDescription' => n2_('You can make the
slider fill up a selected parent element instead of the full browser
width.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1776-fullwidth-layout#adjust-slider-width-to'
));
}
}PK:e�[c�B���CSlider/ResponsiveType/FullWidth/ResponsiveTypeFullWidthFrontend.phpnu�[���<?php
namespace Nextend\SmartSlider3\Slider\ResponsiveType\FullWidth;
use
Nextend\SmartSlider3\Slider\ResponsiveType\AbstractResponsiveTypeFrontend;
class ResponsiveTypeFullWidthFrontend extends
AbstractResponsiveTypeFrontend {
public function parse($params, $responsive, $features) {
$features->align->align = 'normal';
$responsive->minimumHeight =
intval($params->get('responsiveSliderHeightMin', 0));
$responsive->forceFull =
intval($params->get('responsiveForceFull', 1));
$responsive->forceFullOverflowX =
$params->get('responsiveForceFullOverflowX',
'body');
$responsive->forceFullHorizontalSelector =
$params->get('responsiveForceFullHorizontalSelector',
'body');
}
}PK:e�[�f��/Slider/ResponsiveType/ResponsiveTypeFactory.phpnu�[���<?php
namespace Nextend\SmartSlider3\Slider\ResponsiveType;
use Nextend\Framework\Pattern\OrderableTrait;
use Nextend\Framework\Pattern\PluggableTrait;
use Nextend\Framework\Pattern\SingletonTrait;
use Nextend\SmartSlider3\Slider\Feature\Responsive;
class ResponsiveTypeFactory {
use SingletonTrait, PluggableTrait;
/**
* @var AbstractResponsiveType[]
*/
private static $types = array();
/**
* @param AbstractResponsiveType $responsiveType
*/
public static function addType($responsiveType) {
self::$types[$responsiveType->getName()] = $responsiveType;
}
/**
* @param $name
*
* @return AbstractResponsiveType|null
*/
public static function getType($name) {
if (isset(self::$types[$name])) {
return self::$types[$name];
}
if ($name == 'auto') {
/**
* There is no fallback if auto type missing
*/
return null;
}
return self::getType('auto');
}
/**
* @return AbstractResponsiveType[]
*/
public static function getTypes() {
return self::$types;
}
/**
* @return AbstractResponsiveTypeAdmin[]
*/
public static function getAdminTypes() {
$adminTypes = array();
foreach (self::$types AS $name => $type) {
$adminTypes[$name] = $type->createAdmin();
}
OrderableTrait::uasort($adminTypes);
return $adminTypes;
}
protected function init() {
$this->makePluggable('SliderResponsiveType');
}
/**
* @param $name
* @param Responsive $responsive
*
* @return AbstractResponsiveTypeFrontend|null
*/
public static function createFrontend($name, $responsive) {
$type = self::getType($name);
if ($type) {
return $type->createFrontend($responsive);
}
return null;
}
}
ResponsiveTypeFactory::getInstance();PK:e�[$2aT�T�Slider/Slide.phpnu�[���<?php
namespace Nextend\SmartSlider3\Slider;
use JRoute;
use Nextend\Framework\Cast;
use Nextend\Framework\Data\Data;
use Nextend\Framework\FastImageSize\FastImageSize;
use Nextend\Framework\Image\Image;
use Nextend\Framework\Image\ImageEdit;
use Nextend\Framework\Misc\Str;
use Nextend\Framework\Parser\Common;
use Nextend\Framework\Parser\Link;
use Nextend\Framework\Platform\Platform;
use Nextend\Framework\Plugin;
use Nextend\Framework\Request\Request;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\Framework\Sanitize;
use Nextend\Framework\Translation\Translation;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Generator\Generator;
use Nextend\SmartSlider3\Renderable\AbstractRenderableOwner;
use Nextend\SmartSlider3\Renderable\Component\AbstractComponent;
use Nextend\SmartSlider3\Renderable\Component\ComponentSlide;
class Slide extends AbstractRenderableOwner {
/**
* @var Slider
*/
protected $sliderObject;
public $id = 0, $slider = 0, $publish_up = '1970-01-01
00:00:00', $publish_down = '1970-01-01 00:00:00', $published
= 1, $first = 0, $slide = '', $ordering = 0, $generator_id = 0;
protected $frontendFirst = false;
protected $title = '', $description = '',
$thumbnail = '';
public $parameters, $background = '';
protected $html = '';
protected $visible = 1;
public $hasLink = false;
/**
* @var bool|Generator
*/
protected $generator = false;
protected $variables = array();
public $index = -1;
public $publicID = 0;
public $attributes = array(), $linkAttributes = array(),
$showOnAttributes = array();
public $containerAttributes = array(
'class' => 'n2-ss-layers-container
n2-ss-slide-limiter n2-ow'
);
public $classes = '', $style = '';
public $nextCacheRefresh = 2145916800; // 2038
/**
* Slide constructor.
*
* @param $slider Slider
* @param $data array
*/
public function __construct($slider, $data) {
$this->parameters = new Data($data['params'], true);
$version = $this->parameters->getIfEmpty('version',
'0.0.0');
if (version_compare($version, '3.3.9999',
'<')) {
$this->parameters->set('desktopportraitpadding',
'0|*|0|*|0|*|0');
}
unset($data['params']);
foreach ($data as $key => $value) {
$this->$key = $value;
}
$this->slide = array(
'type' => 'slide',
'layers' => json_decode($this->slide,
true),
'title' => $this->title,
'publish_up' => $this->publish_up,
'publish_down' => $this->publish_down,
'published' => $this->published,
'description' => $this->description,
'thumbnail' => $this->thumbnail,
) + $this->parameters->toArray();
if ($version == '0.0.0') {
/**
* Required for sample slider city!!!
*/
$this->fixOldZIndexes($this->slide['layers']);
}
$this->sliderObject = $slider;
$this->renderable = $slider;
$this->onCreate();
}
private function fixOldZIndexes(&$layers) {
/**
* If we do not have version info for the slide, we should do the
check for the old zIndexed storage and sort the layers to the new
structure.
*/
if (is_array($layers)) {
for ($i = 0; $i < count($layers); $i++) {
if (!isset($layers[$i]['zIndex'])) {
if (isset($layers[$i]['style']) &&
preg_match('/z\-index:[ ]*([0-9]+);/',
$layers[$i]['style'], $matches)) {
$layers[$i]['zIndex'] =
intval($matches[1]);
} else {
$layers[$i]['zIndex'] = 0;
}
}
if (isset($layers[$i]['type']) &&
$layers[$i]['type'] == 'group') {
$this->fixOldZIndexes($layers[$i]['layers']);
}
}
if (isset($layers[0]['zIndex'])) {
usort($layers, array(
$this,
"sortOldZIndex"
));
}
}
}
private function sortOldZIndex($a, $b) {
if ($a['zIndex'] == $b['zIndex']) {
return 0;
}
return ($a['zIndex'] < $b['zIndex']) ? 1 :
-1;
}
public function __clone() {
$this->parameters = clone $this->parameters;
}
protected function onCreate() {
Plugin::doAction('ssSlide', array($this));
}
public function initGenerator($extend = array()) {
if ($this->generator_id > 0) {
$this->generator = new Generator($this,
$this->sliderObject, $extend);
}
}
public function hasGenerator() {
return !!$this->generator;
}
public function isComponentVisible($generatorVisibleVariable) {
return !empty($generatorVisibleVariable) &&
$this->hasGenerator();
}
/**
* @return Slide[]
*/
public function expandSlide() {
return $this->generator->getSlides();
}
public function expandSlideAdmin() {
return $this->generator->getSlidesAdmin();
}
public function fillSample() {
if ($this->hasGenerator()) {
$this->generator->fillSample();
}
}
public function setVariables($variables) {
$this->variables = array_merge($this->variables,
(array)$variables);
}
public function isFirst() {
return !!$this->first;
}
public function isCurrentlyEdited() {
return Request::$REQUEST->getInt('slideid') ==
$this->id;
}
public function setIndex($index) {
$this->index = $index;
}
public function setPublicID($publicID) {
$this->publicID = $publicID;
}
/**
* @return int
*/
public function getPublicID(): int {
return $this->publicID;
}
public function setFirst() {
$this->frontendFirst = true;
$this->attributes['data-first'] = '1';
}
public function getFrontendFirst() {
return $this->frontendFirst;
}
public function prepare() {
$this->variables['slide'] = array(
'name' => $this->getTitle(),
'description' => $this->getDescription()
);
}
public function setSlidesParams() {
$this->background =
$this->sliderObject->features->makeBackground($this);
$this->addSlideLink();
$this->attributes['data-slide-duration'] =
Cast::floatToString(max(0,
$this->parameters->get('slide-duration', 0)) / 1000);
$this->attributes['data-id'] =
$this->id;
$this->attributes['data-slide-public-id'] =
$this->publicID;
$this->classes .= ' n2-ss-slide-' . $this->id;
$this->sliderObject->features->makeSlide($this);
$this->renderHtml();
}
protected function addSlideLink() {
$linkV1 = $this->parameters->getIfEmpty('link',
'');
if (!empty($linkV1)) {
list($link, $target) = array_pad((array)Common::parse($linkV1),
2, '');
$this->parameters->un_set('link');
$this->parameters->set('href', $link);
$this->parameters->set('href-target', $target);
}
$url = $this->parameters->get('href');
$target = $this->parameters->get('href-target');
if (!empty($url) && $url != '#') {
$url = $this->fill($url);
}
if (!empty($url) && $url != '#') {
if (empty($target)) {
$target = '_self';
}
$url = ResourceTranslator::toUrl($url);
$this->linkAttributes['onclick'] = '';
if (strpos($url, 'javascript:') === 0) {
$this->linkAttributes['onclick'] = $url;
} else {
$url = Link::parse($url, $this->linkAttributes);
$this->linkAttributes['data-href'] =
JRoute::_($url, false);
$this->linkAttributes['tabindex'] = 0;
$this->linkAttributes['role'] =
'button';
$ariaLabel =
$this->parameters->get('aria-label');
if (!empty($ariaLabel)) {
$this->linkAttributes['aria-label'] =
$ariaLabel;
}
if (empty($this->linkAttributes['onclick'])
&& !isset($this->linkAttributes['data-n2-lightbox']))
{
if (!empty($target) && $target !=
'_self') {
$this->linkAttributes['data-target'] =
$target;
}
$this->linkAttributes['data-n2click'] =
"url";
}
}
if (!isset($this->linkAttributes['style'])) {
$this->linkAttributes['style'] = '';
}
$this->linkAttributes['data-force-pointer'] =
"";
$this->hasLink = true;
}
}
public function getRawLink() {
$linkV1 = $this->parameters->getIfEmpty('link',
'');
if (!empty($linkV1)) {
list($link, $target) = array_pad((array)Common::parse($linkV1),
2, '');
return $link;
}
return $this->parameters->getIfEmpty('href',
'');
}
public function getRawLinkHref() {
$linkV1 = $this->parameters->getIfEmpty('link',
'');
if (!empty($linkV1)) {
list($link, $target) = array_pad((array)Common::parse($linkV1),
2, '');
return $target;
}
return $this->parameters->getIfEmpty('href-target',
'_self');
}
public function getSlider() {
return $this->sliderObject;
}
public function getAvailableDevices() {
return
array_diff(array_keys($this->sliderObject->features->responsive->mediaQueries),
array('all'));
}
protected function renderHtml() {
if (empty($this->html)) {
AbstractComponent::$isAdmin =
$this->sliderObject->isAdmin;
$mainContainer = new ComponentSlide($this, $this->slide);
$this->html = '<div tabindex="-1"
class="n2-ss-slide--focus" role="note">' .
$this->getTitle() . '</div>';
$this->html .= Html::tag('div',
$this->containerAttributes,
$mainContainer->render($this->sliderObject->isAdmin));
}
}
public function finalize() {
if ($this->sliderObject->exposeSlideData['title'])
{
$title = $this->getTitle();
if (!empty($title)) {
$this->attributes['data-title'] =
Translation::_($title);
}
}
if
($this->sliderObject->exposeSlideData['description']) {
$description = $this->getDescription();
if (!empty($description)) {
$this->attributes['data-description'] =
Translation::_($description);
}
}
if
($this->sliderObject->exposeSlideData['thumbnail']) {
$thumbnail = $this->getThumbnailDynamic();
if (!empty($thumbnail)) {
$attributes = Html::addExcludeLazyLoadAttributes(array(
'loading' => 'lazy',
'style' => '',
'class' =>
'n2-ss-slide-thumbnail'
));
$this->html .=
Html::image($this->sliderObject->features->optimize->optimizeThumbnail($thumbnail),
Sanitize::esc_attr($this->getTitle()), $attributes);
}
}
if
($this->sliderObject->exposeSlideData['lightboxImage']) {
$lightboxImage = $this->getLightboxImage();
if (!empty($lightboxImage)) {
$this->attributes['data-lightbox-image'] =
$lightboxImage;
}
}
if ($this->hasLink) {
$this->attributes['data-haslink'] = 1;
}
if (!$this->sliderObject->isAdmin || !$this->underEdit) {
if (!$this->isVisibleDesktopPortrait()) {
$this->showOnAttributes['data-hide-desktopportrait'] = 1;
}
if (!$this->isVisibleDesktopLandscape()) {
$this->showOnAttributes['data-hide-desktoplandscape'] = 1;
}
if (!$this->isVisibleTabletPortrait()) {
$this->showOnAttributes['data-hide-tabletportrait'] = 1;
}
if (!$this->isVisibleTabletLandscape()) {
$this->showOnAttributes['data-hide-tabletlandscape'] = 1;
}
if (!$this->isVisibleMobilePortrait()) {
$this->showOnAttributes['data-hide-mobileportrait'] = 1;
}
if (!$this->isVisibleMobileLandscape()) {
$this->showOnAttributes['data-hide-mobilelandscape'] = 1;
}
}
$this->attributes += $this->showOnAttributes;
}
public function isVisibleDesktopPortrait() {
return $this->parameters->get('desktopportrait',
1);
}
public function isVisibleDesktopLandscape() {
return $this->parameters->get('desktoplandscape',
1);
}
public function isVisibleTabletPortrait() {
return $this->parameters->get('tabletportrait', 1);
}
public function isVisibleTabletLandscape() {
return $this->parameters->get('tabletlandscape',
1);
}
public function isVisibleMobilePortrait() {
return $this->parameters->get('mobileportrait', 1);
}
public function isVisibleMobileLandscape() {
return $this->parameters->get('mobilelandscape',
1);
}
public function getHTML() {
return $this->html;
}
public function getAsStatic() {
$mainContainer = new ComponentSlide($this, $this->slide);
$attributes = array(
'class' => 'n2-ss-static-slide n2-ow' .
$this->classes
);
if (!$this->sliderObject->isAdmin || !$this->underEdit) {
if (!$this->isVisibleDesktopPortrait()) {
$attributes['data-hide-desktopportrait'] = 1;
}
if (!$this->isVisibleDesktopLandscape()) {
$attributes['data-hide-desktoplandscape'] = 1;
}
if (!$this->isVisibleTabletPortrait()) {
$attributes['data-hide-tabletportrait'] = 1;
}
if (!$this->isVisibleTabletLandscape()) {
$attributes['data-hide-tabletlandscape'] = 1;
}
if (!$this->isVisibleMobilePortrait()) {
$attributes['data-hide-mobileportrait'] = 1;
}
if (!$this->isVisibleMobileLandscape()) {
$attributes['data-hide-mobilelandscape'] = 1;
}
}
return Html::tag('div', $attributes,
$mainContainer->render($this->sliderObject->isAdmin));
}
public function forceNonStatic() {
$this->parameters->set('static-slide', 0);
}
public function isStatic() {
if ($this->parameters->get('static-slide', 0)) {
return true;
}
return false;
}
private static function splitTokens($input) {
$tokens = array();
$currentToken = "";
$nestingLevel = 0;
for ($i = 0; $i < strlen($input); $i++) {
$currentChar = $input[$i];
if ($currentChar === "," && $nestingLevel ===
0) {
$tokens[] = $currentToken;
$currentToken = "";
} else {
$currentToken .= $currentChar;
if ($currentChar === "(") {
$nestingLevel++;
} else if ($currentChar === ")") {
$nestingLevel--;
}
}
}
if (strlen($currentToken)) {
$tokens[] = $currentToken;
}
return $tokens;
}
public function fill($value) {
if (!empty($this->variables) && !empty($value)) {
return
preg_replace_callback('/{((([a-z]+)\(([^}]+)\))|([a-zA-Z0-9][a-zA-Z0-9_\/]*))}/',
array(
$this,
'parseFunction'
), $value);
}
return $value;
}
private function parseFunction($match) {
if (!isset($match[5])) {
$args = self::splitTokens($match[4]);
for ($i = 0; $i < count($args); $i++) {
$args[$i] = $this->parseVariable($args[$i]);
}
if (method_exists($this, '_' . $match[3])) {
return call_user_func_array(array(
$this,
'_' . $match[3]
), $args);
}
return $match[0];
} else {
return $this->parseVariable($match[5]);
}
}
private function parseVariable($variable) {
preg_match('/^("|\')(.*)("|\')$/',
$variable, $match);
if (!empty($match)) {
return $match[2];
}
preg_match('/((([a-z]+)\(([^}]+)\)))/', $variable,
$match);
if (!empty($match)) {
return call_user_func(array(
$this,
'parseFunction'
), $match);
} else {
preg_match('/([a-zA-Z][0-9a-zA-Z_]*)(\/([0-9a-z]+))?/',
$variable, $match);
if ($match) {
$index = empty($match[3]) ? 0 : $match[3];
if (is_numeric($index)) {
$index = max(1, intval($index)) - 1;
}
if (isset($this->variables[$index]) &&
isset($this->variables[$index][$match[1]])) {
return $this->variables[$index][$match[1]];
} else {
return '';
}
}
return $variable;
}
}
private function _fallback($s, $def) {
if (empty($s)) {
return $def;
}
return $s;
}
private function _cleanhtml($s) {
return strip_tags($s,
'<p><a><b><br><i>');
}
private function _removehtml($s) {
return strip_tags($s);
}
private function _splitbychars($s, $start = 0, $length = null) {
return Str::substr($s, $start, $length);
}
private function _splitbywords($s, $start, $length) {
$len = Str::strlen($s);
$posStart = max(0, $start == 0 ? 0 : Str::strpos($s, ' ',
$start));
$posEnd = max(0, $length > $len ? $len : Str::strpos($s,
' ', $length));
if ($posEnd == 0 && $length <= $len) $posEnd = $len;
return Str::substr($s, $posStart, $posEnd);
}
private function _findimage($s, $index) {
$index = isset($index) ? intval($index) - 1 : 0;
preg_match_all('/(<img.*?src=[\'"](.*?)[\'"][^>]*>)|(background(-image)??\s*?:.*?url\((["|\']?)?(.+?)(["|\']?)?\))/i',
$s, $r);
if (isset($r[2]) && !empty($r[2][$index])) {
$s = $r[2][$index];
} else if (isset($r[6]) && !empty($r[6][$index])) {
$s = trim($r[6][$index], "'\"
\t\n\r\0\x0B");
} else {
$s = '';
}
return $s;
}
private function _findlink($s, $index) {
$index = isset($index) ? intval($index) - 1 : 0;
preg_match_all('/href=["\']?([^"\'>]+)["\']?/i',
$s, $r);
if (isset($r[1]) && !empty($r[1][$index])) {
$s = $r[1][$index];
} else {
$s = '';
}
return $s;
}
private function _removevarlink($s) {
return preg_replace('/<a
href=\"(.*?)\">(.*?)<\/a>/', '', $s);
}
private function _removelinebreaks($s) {
return preg_replace('/\r?\n|\r/', '', $s);
}
public function getTitle($isAdmin = false) {
return $this->fill($this->title);
}
public function getDescription() {
return $this->fill($this->description);
}
public function getRawTitle() {
return $this->title;
}
public function getRawDescription() {
return $this->description;
}
public function getBackgroundImage() {
return
$this->fill($this->parameters->get('backgroundImage'));
}
public function getThumbnail() {
return ResourceTranslator::toUrl($this->getThumbnailRaw());
}
public function getThumbnailRaw() {
$image = $this->thumbnail;
if (empty($image)) {
return $this->getBackgroundImage();
}
return $this->fill($image);
}
public function getThumbnailDynamic() {
$image = $this->thumbnail;
if (empty($image)) {
$image =
$this->parameters->get('backgroundImage');
}
return $this->fill($image);
}
public function getLightboxImage() {
$image =
$this->fill($this->parameters->get('ligthboxImage'));
if (empty($image)) {
$image = $this->getBackgroundImage();
}
return ResourceTranslator::toUrl($image);
}
public function getRow() {
$this->fillParameters();
return array(
'title' => $this->getTitle(),
'slide' => $this->getFilledLayers(),
'description' => $this->getDescription(),
'thumbnail' =>
ResourceTranslator::urlToResource($this->getThumbnail()),
'published' => $this->published,
'publish_up' => $this->publish_up,
'publish_down' => $this->publish_down,
'first' => $this->first,
'params' =>
$this->parameters->toJSON(),
'slider' => $this->slider,
'ordering' => $this->ordering,
'generator_id' => 0
);
}
public function fillParameters() {
$this->parameters->set('backgroundImage',
$this->fill($this->parameters->get('backgroundImage')));
$this->parameters->set('backgroundAlt',
$this->fill($this->parameters->get('backgroundAlt')));
$this->parameters->set('backgroundTitle',
$this->fill($this->parameters->get('backgroundTitle')));
$this->parameters->set('backgroundVideoMp4',
$this->fill($this->parameters->get('backgroundVideoMp4')));
$this->parameters->set('backgroundColor',
$this->fill($this->parameters->get('backgroundColor')));
$this->parameters->set('href',
$this->fill($this->parameters->get('href')));
}
private function getFilledLayers() {
$layers = $this->slide['layers'];
if (!$this->underEdit) {
$layers =
AbstractComponent::translateUniqueIdentifier($layers);
}
$this->fillLayers($layers);
return json_encode($layers);
}
public function setNextCacheRefresh($time) {
$this->nextCacheRefresh = min($this->nextCacheRefresh,
$time);
}
public function setVisibility($visibility) {
$this->visible = $visibility;
}
public function isVisible() {
if (!$this->visible) {
return false;
}
if ($this->publish_down != '1970-01-01 00:00:00') {
$publish_down = strtotime($this->publish_down);
if ($publish_down) {
if ($publish_down > Platform::getTimestamp()) {
$this->setNextCacheRefresh($publish_down);
} else {
return false;
}
}
}
if ($this->publish_up != '1970-01-01 00:00:00') {
$publish_up = strtotime($this->publish_up);
if ($publish_up) {
if ($publish_up > Platform::getTimestamp()) {
$this->setNextCacheRefresh($publish_up);
return false;
}
}
}
return true;
}
public function getSlideStat() {
if ($this->hasGenerator()) {
return $this->generator->getSlideStat();
}
return '1/1';
}
public function getGeneratorLabel() {
$source = $this->generator->getSource();
if (!$source) {
return n2_('Not found');
}
return $source->getLabel();
}
public function getElementID() {
return $this->getSlider()->elementId;
}
public function addScript($script, $name = false) {
$this->sliderObject->addScript($script, $name);
}
public function isScriptAdded($name) {
return $this->sliderObject->isScriptAdded($name);
}
public function addLess($file, $context) {
$this->sliderObject->addLess($file, $context);
}
public function addCSS($css) {
$this->sliderObject->addCSS($css);
}
public function addDeviceCSS($device, $css) {
$this->sliderObject->addDeviceCSS($device, $css);
}
public function addFont($font, $mode, $pre = null) {
return $this->sliderObject->addFont($font, $mode, $pre);
}
public function addStyle($style, $mode, $pre = null) {
return $this->sliderObject->addStyle($style, $mode, $pre);
}
public function addImage($imageUrl) {
$this->sliderObject->addImage($imageUrl);
}
public function isAdmin() {
return $this->sliderObject->isAdmin;
}
public function isLazyLoadingEnabled() {
return
$this->sliderObject->features->lazyLoad->isEnabled;
}
public function optimizeImageWebP($src) {
if
($this->sliderObject->params->get('layer-image-webp',
0)) {
$imagePath = ResourceTranslator::toPath($src);
if (isset($imagePath[0])) {
$extension = pathinfo($imagePath, PATHINFO_EXTENSION);
if ($extension != 'svg' && $extension !=
'webp') {
$lazyLoad =
$this->sliderObject->features->lazyLoad;
return
$this->sliderObject->features->optimize->optimizeImageWebP($src,
array(
'optimize' => true,
'quality' =>
intval($this->sliderObject->params->get('layer-image-optimize-quality',
70)),
'resize' =>
$this->sliderObject->params->get('layer-image-optimize',
0),
'defaultWidth' =>
$lazyLoad->layerImageWidthNormal,
'mediumWidth' =>
$lazyLoad->layerImageWidthTablet,
'smallWidth' =>
$lazyLoad->layerImageWidthMobile
));
}
}
}
return array();
}
public function renderImage($item, $src, $attributes = array(),
$pictureAttributes = array()) {
/**
* @see
https://bugs.chromium.org/p/chromium/issues/detail?id=1181291
*/
if (!$this->frontendFirst) {
$attributes['loading'] = 'lazy';
}
$imageUrl = ResourceTranslator::toUrl($src);
FastImageSize::initAttributes($src, $attributes);
$attributes = Html::addExcludeLazyLoadAttributes($attributes);
$lazyLoad = $this->sliderObject->features->lazyLoad;
$imagePath = ResourceTranslator::toPath($src);
if (isset($imagePath[0])) {
$extension = pathinfo($imagePath, PATHINFO_EXTENSION);
if ($lazyLoad->layerImageSizeBase64 &&
$lazyLoad->layerImageSizeBase64Size && filesize($imagePath) <
$lazyLoad->layerImageSizeBase64Size) {
if ($extension != 'svg') {
$attributes['src'] =
ImageEdit::base64($imagePath, $imageUrl);
} else {
$attributes['src'] =
Image::SVGToBase64($src);
}
return Html::tag('img', $attributes);
}
if ($extension != 'svg' && $extension !=
'webp' &&
$item->data->get('image-optimize', 1)) {
$optimizedData =
$this->sliderObject->features->optimize->optimizeImageWebP($src,
array(
'optimize' =>
$this->sliderObject->params->get('layer-image-webp', 0),
'quality' =>
intval($this->sliderObject->params->get('layer-image-optimize-quality',
70)),
'resize' =>
$this->sliderObject->params->get('layer-image-optimize',
0),
'defaultWidth' =>
$lazyLoad->layerImageWidthNormal,
'mediumWidth' =>
$lazyLoad->layerImageWidthTablet,
'smallWidth' =>
$lazyLoad->layerImageWidthMobile
));
$retinaSupport =
!!$this->sliderObject->params->get('layer-image-width-retina',
0);
$sources = array();
if ($retinaSupport) {
$webPSrcSet = array();
if (isset($optimizedData['small'])) {
$this->addImage($optimizedData['small']['src']);
$webPSrcSet[] =
$optimizedData['small']['src'] . ' ' .
$optimizedData['small']['width'] . 'w';
}
if (isset($optimizedData['medium'])) {
$this->addImage($optimizedData['medium']['src']);
$webPSrcSet[] =
$optimizedData['medium']['src'] . ' ' .
$optimizedData['medium']['width'] . 'w';
}
if (isset($optimizedData['normal'])) {
$this->addImage($optimizedData['normal']['src']);
$webPSrcSet[] =
$optimizedData['normal']['src'] . ' ' .
$optimizedData['normal']['width'] . 'w';
}
if (!empty($webPSrcSet)) {
$sources[] = HTML::tag('source',
Html::addExcludeLazyLoadAttributes(array(
'srcset' => implode(',',
$webPSrcSet),
'type' => 'image/webp'
)));
}
} else {
if (isset($optimizedData['small'])) {
$this->addImage($optimizedData['small']['src']);
$sources[] = HTML::tag('source',
Html::addExcludeLazyLoadAttributes(array(
'srcset' =>
$optimizedData['small']['src'],
'type' =>
'image/webp',
'media' => '(max-width:
' . $optimizedData['small']['width'] .
'px)'
)));
}
if (isset($optimizedData['medium'])) {
$this->addImage($optimizedData['medium']['src']);
$sources[] = HTML::tag('source',
Html::addExcludeLazyLoadAttributes(array(
'srcset' =>
$optimizedData['medium']['src'],
'type' =>
'image/webp',
'media' => '(max-width:
' . $optimizedData['medium']['width'] .
'px)'
)));
}
if (isset($optimizedData['normal'])) {
$this->addImage($optimizedData['normal']['src']);
$sources[] = HTML::tag('source',
Html::addExcludeLazyLoadAttributes(array(
'srcset' =>
$optimizedData['normal']['src'],
'type' => 'image/webp'
)));
}
}
$attributes['src'] = $imageUrl;
$this->addImage($imageUrl);
$sources[] = Html::tag('img', $attributes,
false);
return HTML::tag('picture', $pictureAttributes,
implode('', $sources));
}
}
$attributes['src'] = $imageUrl;
$this->addImage($imageUrl);
return Html::tag('img', $attributes);
}
public function getThumbnailType() {
return $this->parameters->get('thumbnailType',
'default');
}
public function renderThumbnailImage($width, $height, $attributes =
array()) {
$src = $this->getThumbnailRaw();
if (empty($src)) {
return '<img src="data:," alt
style="visibility:hidden;">';
}
$attributes['src'] = ResourceTranslator::toUrl($src);
$originalThumbnailSize = FastImageSize::getSize($src);
if ($originalThumbnailSize) {
$attributes['width'] =
$originalThumbnailSize['width'];
$attributes['height'] =
$originalThumbnailSize['height'];
}
$attributes['loading'] = 'lazy';
$attributes = Html::addExcludeLazyLoadAttributes($attributes);
$sources = array();
$imagePath = ResourceTranslator::toPath($src);
if (isset($imagePath[0])) {
$optimizeThumbnail =
$this->sliderObject->params->get('optimize-thumbnail-scale',
0);
$extension = pathinfo($imagePath, PATHINFO_EXTENSION);
if ($extension != 'webp' &&
$this->sliderObject->params->get('optimize-webp', 0)
&& function_exists('imagewebp')) {
$isRemote = false;
if (preg_match('/(https?:)?\/\//', $imagePath)) {
//this is a remote image
$isRemote = true;
}
$quality =
intval($this->sliderObject->params->get('optimize-thumbnail-quality',
70));
$options = array(
'quality' => $quality,
'remote' => $isRemote
);
if ($optimizeThumbnail) {
$options['mode'] = 'resize';
$options['width'] =
intval($this->sliderObject->params->get('optimizeThumbnailWidth',
100));
$options['height'] =
intval($this->sliderObject->params->get('optimizeThumbnailHeight',
60));
} else {
$options['mode'] = 'scale';
$options['scale'] = 1;
}
$imageWebpUrl =
ImageEdit::scaleImageWebp('slider/cache', $src, $options);
if ($imageWebpUrl) {
$imageWebpUrl =
ResourceTranslator::toUrl($imageWebpUrl);
$this->addImage($imageWebpUrl);
$sources[] = HTML::tag('source',
Html::addExcludeLazyLoadAttributes(array(
'srcset' => $imageWebpUrl,
'type' => 'image/webp'
)));
}
}
if ($optimizeThumbnail) {
$optimizedThumbnailUrl =
$this->sliderObject->features->optimize->optimizeThumbnail($attributes['src']);
$attributes['src'] = $optimizedThumbnailUrl;
$optimizedThumbnailSize =
FastImageSize::getSize(ResourceTranslator::urlToResource($optimizedThumbnailUrl));
if ($optimizedThumbnailSize) {
$attributes['width'] =
$optimizedThumbnailSize['width'];
$attributes['height'] =
$optimizedThumbnailSize['height'];
}
}
}
$sources[] = Html::tag('img', $attributes, false);
return HTML::tag('picture', array(),
implode('', $sources));
}
}PK:e�[�8ޖ�5�5Slider/Slider.phpnu�[���<?php
namespace Nextend\SmartSlider3\Slider;
use Exception;
use Nextend\Framework\Asset\AssetManager;
use Nextend\Framework\Asset\Css\Css;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\Data\Data;
use Nextend\Framework\Pattern\MVCHelperTrait;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Application\Model\ModelSliders;
use Nextend\SmartSlider3\Renderable\AbstractRenderable;
use Nextend\SmartSlider3\Slider\Base\PlatformSliderTrait;
use Nextend\SmartSlider3\Slider\SliderType\AbstractSliderTypeCss;
use Nextend\SmartSlider3\Slider\SliderType\AbstractSliderTypeFrontend;
use Nextend\SmartSlider3\Slider\SliderType\SliderTypeFactory;
class Slider extends AbstractRenderable {
use PlatformSliderTrait, MVCHelperTrait;
const LOAD_STATE_NONE = 0;
const LOAD_STATE_SLIDER = 1;
const LOAD_STATE_SLIDES = 2;
const LOAD_STATE_ALL = 3;
protected $loadState;
protected $isAdminArea = false;
public $manifestData = array(
'generator' => array()
);
protected $isGroup = false;
public $hasError = false;
public $sliderId = 0;
public $cacheId = '';
/** @var Data */
public $data;
public $disableResponsive = false;
protected $parameters = array(
'disableResponsive' => false,
'sliderData' => array(),
'slidesData' => array(),
'generatorData' => array()
);
public $fontSize = 16;
/**
* @var Slides
*/
protected $slidesBuilder;
protected $cache = false;
public static $_identifier = 'n2-ss';
/** @var Slide[] */
public $staticSlides = array();
/** @var AbstractSliderTypeFrontend */
public $sliderType;
/**
* @var AbstractSliderTypeCss
*/
public $assets;
public $staticHtml = '';
private $sliderRow;
public $exposeSlideData = array(
'title' => true,
'description' => false,
'thumbnail' => false,
'lightboxImage' => false
);
/**
* @var Data
*/
public $params;
/**
* @var Slide
*/
protected $activeSlide;
/**
* Slider constructor.
*
* @param MVCHelperTrait $MVCHelper
* @param $sliderId
* @param $parameters
* @param $isAdminArea
*/
public function __construct($MVCHelper, $sliderId, $parameters,
$isAdminArea = false) {
$this->loadState = self::LOAD_STATE_NONE;
$this->isAdminArea = $isAdminArea;
$this->setMVCHelper($MVCHelper);
$this->initPlatformSlider();
$this->sliderId = $sliderId;
$this->setElementId();
$this->cacheId = static::getCacheId($this->sliderId);
$this->parameters = array_merge($this->parameters,
$parameters);
$this->disableResponsive =
$this->parameters['disableResponsive'];
}
public function setElementId() {
$this->elementId = self::$_identifier . '-' .
$this->sliderId;
}
public static function getCacheId($sliderId) {
return self::$_identifier . '-' . $sliderId;
}
public function getAlias() {
return $this->data->get('alias', '');
}
/**
* @throws Exception
*/
public function initSlider() {
if ($this->loadState < self::LOAD_STATE_SLIDER) {
$slidersModel = new ModelSliders($this->MVCHelper);
$sliderRow = $slidersModel->get($this->sliderId);
if (empty($sliderRow)) {
$this->hasError = true;
throw new Exception('Slider does not exists!');
} else {
if (!$this->isAdminArea &&
$sliderRow['status'] != 'published') {
$this->hasError = true;
throw new Exception('Slider is not
published!');
}
if (!empty($this->parameters['sliderData'])) {
$sliderData =
$this->parameters['sliderData'];
$sliderRow['title'] =
$sliderData['title'];
unset($sliderData['title']);
$sliderRow['type'] =
$sliderData['type'];
unset($sliderData['type']);
$this->data = new Data($sliderRow);
$this->params = new SliderParams($this->sliderId,
$sliderRow['type'], $sliderData);
} else {
$this->data = new Data($sliderRow);
$this->params = new SliderParams($this->sliderId,
$sliderRow['type'], $sliderRow['params'], true);
}
switch ($sliderRow['type']) {
case 'group':
$this->isGroup = true;
break;
}
}
$this->loadState = self::LOAD_STATE_SLIDER;
}
}
/**
* @throws Exception
*/
public function initSlides() {
if ($this->loadState < self::LOAD_STATE_SLIDES) {
$this->initSlider();
if (!$this->isGroup) {
$this->slidesBuilder = new Slides($this);
$this->slidesBuilder->initSlides($this->parameters['slidesData'],
$this->parameters['generatorData']);
}
$this->loadState = self::LOAD_STATE_SLIDES;
}
}
/**
* @throws Exception
*/
public function initAll() {
if ($this->loadState < self::LOAD_STATE_ALL) {
$this->initSlides();
$this->loadState = self::LOAD_STATE_ALL;
}
}
private function loadSlider() {
$this->sliderType =
SliderTypeFactory::createFrontend($this->data->get('type',
'simple'), $this);
$defaults = $this->sliderType->getDefaults();
$this->params->fillDefault($defaults);
$this->sliderType->limitParams($this->params);
if (!$this->isGroup) {
$this->features = new FeatureManager($this);
}
return true;
}
public function getNextCacheRefresh() {
if ($this->isGroup) {
return $this->sliderType->getNextCacheRefresh();
}
return $this->slidesBuilder->getNextCacheRefresh();
}
/**
* @return string
* @throws Exception
*/
public function render() {
if ($this->loadState < self::LOAD_STATE_ALL) {
throw new Exception('Load state not reached all!');
}
if (!$this->loadSlider()) {
return false;
}
if (!$this->isGroup) {
if (!$this->hasSlides()) {
$this->slidesBuilder->addDummySlides();
}
if (!$this->getActiveSlide()) {
$slides = $this->getSlides();
$this->setActiveSlide($slides[0]);
}
$this->getActiveSlide()
->setFirst();
}
$this->assets =
SliderTypeFactory::createCss($this->data->get('type',
'simple'), $this);
if (!$this->isGroup) {
$this->slidesBuilder->prepareRender();
$this->renderStaticSlide();
}
$slider = $this->sliderType->render($this->assets);
$slider = str_replace('n2-ss-0', $this->elementId,
$slider);
$rockedLoader = false;
if (!$this->isAdmin) {
$rocketAttributes = '';
$loadingType =
$this->params->get('loading-type');
if ($loadingType == 'afterOnLoad') {
$rocketAttributes .= ' data-loading-type="'
. $loadingType . '"';
} else if ($loadingType == 'afterDelay') {
$delay = max(0,
intval($this->params->get('delay'), 0));
if ($delay > 0) {
$rocketAttributes .= '
data-loading-type="' . $loadingType . '"';
$rocketAttributes .= '
data-loading-delay="' . $delay . '"';
}
}
if (!empty($rocketAttributes)) {
$slider = '<template id="' .
$this->elementId . '_t"' . $rocketAttributes .
'>' . $slider . '</template>';
$rockedLoader = true;
}
}
if (!$this->isGroup) {
$slider =
$this->features->translateUrl->renderSlider($slider) .
HTML::tag('ss3-loader', array(), '');
$slider =
$this->features->align->renderSlider($slider,
$this->assets->sizes['width']);
$slider =
$this->features->margin->renderSlider($slider);
Css::addInline($this->sliderType->getStyle(),
$this->elementId);
$jsInlineMode =
\Nextend\Framework\Settings::get('javascript-inline',
'head');
switch ($jsInlineMode) {
case 'body':
$slider .=
Html::script($this->sliderType->getScript());
break;
case 'head':
default:
Js::addInline($this->sliderType->getScript());
break;
}
}
$html = '';
$classes = array(
'n2-section-smartslider',
'fitvidsignore',
$this->params->get('classes', '')
);
if (intval($this->params->get('clear-both', 1))) {
$classes[] = 'n2_clear';
}
$sliderAttributes = array(
'class' => implode(' ', $classes),
'data-ssid' => $this->sliderId
);
$ariaLabel = $this->params->get('aria-label',
'Slider');
if (!empty($ariaLabel)) {
$sliderAttributes['tabindex'] = '0';
$sliderAttributes['role'] = 'region';
$sliderAttributes['aria-label'] = $ariaLabel;
}
$alias = $this->getAlias();
if (!empty($alias)) {
$sliderAttributes['data-alias'] = $alias;
if (intval($this->params->get('alias-id', 0)))
{
$sliderAttributes['id'] = $alias;
if
(intval($this->params->get('alias-slideswitch-scroll', 1)))
{
$slideAnchorHTML = '';
$slideCount = $this->getSlidesCount();
for ($i = 1; $i <= $slideCount; $i++) {
$slideAnchorHTML .= Html::tag('div',
array(
'id' => $alias . '-' .
$i
));
}
$slider = $slideAnchorHTML . $slider;
}
}
}
$sizes = $this->assets->sizes;
if ($rockedLoader && !empty($sizes['width'])
&& !empty($sizes['height'])) {
$sliderAttributes['style'] = 'height:' .
$sizes['height'] . 'px;';
}
$html .= Html::tag("div", $sliderAttributes, $slider);
if (!$this->params->get('optimize-jetpack-photon',
0)) {
AssetManager::$image->add($this->images);
}
$needDivWrap = false;
if (!$this->isGroup &&
$this->features->responsive->type === 'fullpage') {
$attrs = array(
'data-based-on' =>
$this->features->responsive->sliderHeightBasedOn,
);
if (!$this->isAdminArea) {
$attrs['data-threshold'] = 150;
}
$subtract =
$this->features->responsive->responsiveDecreaseSliderHeight;
if ($subtract) {
$attrs['style'] = '--subtract:' .
$this->features->responsive->responsiveDecreaseSliderHeight .
'px';
}
$html = Html::tag("ss3-fullpage", $attrs,
$html);
$needDivWrap = true;
}
if (!$this->isGroup && !$this->isAdmin &&
$this->features->responsive->forceFull) {
$html = Html::tag("ss3-force-full-width",
array(
'data-overflow-x' =>
$this->features->responsive->forceFullOverflowX,
'data-horizontal-selector' =>
$this->features->responsive->forceFullHorizontalSelector
), $html);
$needDivWrap = true;
}
if ($needDivWrap) {
return Html::tag("div", array(), $html);
}
return $html;
}
public function addStaticSlide($slide) {
$this->staticSlides[] = $slide;
}
public function renderStaticSlide() {
$this->staticHtml = '';
if (count($this->staticSlides)) {
for ($i = 0; $i < count($this->staticSlides); $i++) {
$this->staticHtml .=
$this->staticSlides[$i]->getAsStatic();
}
}
}
public static function removeShortcode($content) {
$content = preg_replace('/smartslider3\[([0-9]+)\]/',
'', $content);
$content = preg_replace('/\[smartslider3
slider="([0-9]+)"\]/', '', $content);
$content = preg_replace('/\[smartslider3
slider=([0-9]+)\]/', '', $content);
return $content;
}
/**
* @return Slide
*/
public function getActiveSlide() {
return $this->activeSlide;
}
/**
* @param Slide $activeSlide
*/
public function setActiveSlide($activeSlide) {
$this->activeSlide = $activeSlide;
}
/**
* @return Slide[]
*/
public function getSlides() {
return $this->slidesBuilder->getSlides();
}
/**
* @return bool
*/
public function hasSlides() {
if ($this->isGroup) {
return true;
}
return $this->slidesBuilder->hasSlides();
}
/**
* @return int
*/
public function getSlidesCount() {
if ($this->isGroup) {
return 0;
}
return $this->slidesBuilder->getSlidesCount();
}
public function isGroup() {
$this->initSlider();
return $this->isGroup;
}
public function isLegacyFontScale() {
return !!$this->params->get('legacy-font-scale',
0);
}
}PK:e�[����1�1Slider/SliderParams.phpnu�[���<?php
namespace Nextend\SmartSlider3\Slider;
use Nextend\Framework\Data\Data;
use Nextend\SmartSlider3\Application\ApplicationSmartSlider3;
use Nextend\SmartSlider3\Application\Model\ModelSlides;
class SliderParams extends Data {
protected $sliderID;
/**
* @var string
*/
protected $sliderType;
public function __construct($sliderID, $sliderType, $data = null, $json
= false) {
$this->sliderID = $sliderID;
$this->sliderType = $sliderType;
parent::__construct($data, $json);
$this->upgradeData();
}
private function upgradeData() {
$this->upgradeSliderTypeResponsive();
$this->upgradeMaxSliderHeight();
$this->upgradeLimitSlideWidth();
$this->upgradeShowOn();
$this->upgradeShowOn('widget-arrow-display-');
$this->upgradeShowOn('widget-autoplay-display-');
$this->upgradeShowOn('widget-bar-display-');
$this->upgradeShowOn('widget-bullet-display-');
$this->upgradeShowOn('widget-shadow-display-');
$this->upgradeShowOn('widget-thumbnail-display-');
$this->upgradeShowOn('widget-fullscreen-display-');
$this->upgradeShowOn('widget-html-display-');
$this->upgradeShowOn('widget-indicator-display-');
$this->upgradeAdaptiveResponsiveMode();
$this->upgradeCustomSliderSize();
$this->upgradeLoadingType();
$this->upgradeSlideBackgroundOptimize();
$this->upgradeThumbnailsControlSize();
$this->upgradeCarouselSideSpacing();
$this->upgradeShowcaseSideSpacing();
if ($this->has('optimize-background-image-width')) {
/**
* This setting was available only before version 3.5 so, if we
end up here then it is an old slider.
* If there are root absolute layers with disabled adaptive
sizing, we enable the legacy font scale.
*/
$slidesModel = new
ModelSlides(ApplicationSmartSlider3::getInstance()
->getApplicationTypeFrontend());
$hasAbsolute = false;
$slides = $slidesModel->getAll($this->sliderID);
foreach ($slides as $slide) {
$layers = json_decode($slide['slide'], true);
foreach ($layers as $layer) {
if ($layer['type'] != 'content') {
if (isset($layer['adaptivefont'])
&& $layer['adaptivefont'] == 0 &&
isset($layer['item']) &&
in_array($layer['item']['type'], array(
'button',
'heading',
'text',
'animatedHeading',
'caption',
'highlightedHeading',
'html',
'list',
'imagebox',
'input'
))) {
$hasAbsolute = true;
break;
}
}
}
if ($hasAbsolute) {
break;
}
}
if ($hasAbsolute) {
$this->set('legacy-font-scale',
'1');
}
}
}
private function upgradeSliderTypeResponsive() {
if ($this->sliderType == 'carousel' ||
$this->sliderType == 'showcase') {
if ($this->get('responsive-mode') ==
'fullpage') {
$this->set('responsive-mode',
'fullwidth');
}
}
}
private function upgradeMaxSliderHeight() {
if ($this->has('responsiveSliderHeightMax')) {
$maxSliderHeight =
intval($this->get('responsiveSliderHeightMax', 3000));
if ($maxSliderHeight < 1) {
$maxSliderHeight = 3000;
}
$sliderWidth = intval($this->get('width'));
$sliderHeight = intval($this->get('height'));
$maxSliderWidth = round($sliderWidth * ($maxSliderHeight /
$sliderHeight));
$maxSlideWidth =
intval($this->get('responsiveSlideWidthMax', 3000));
if ($this->has('responsiveSlideWidth')) {
if ($this->get('responsiveSlideWidth', 1)) {
if ($maxSliderWidth < $maxSlideWidth) {
$this->set('responsiveSlideWidthMax',
$maxSliderWidth);
}
} else {
if ($maxSliderWidth > 100) {
$this->set('responsiveSlideWidth', 1);
$this->set('responsiveSlideWidthMax',
$maxSliderWidth);
}
}
} else {
$maxWidth = INF;
if ($maxSlideWidth > 0) {
$maxWidth = min($maxWidth, $maxSlideWidth);
}
if ($maxSliderWidth > 0) {
$maxWidth = min($maxWidth, $maxSliderWidth);
}
if ($maxWidth != INF) {
$this->set('responsiveSlideWidth', 1);
$this->set('responsiveSlideWidthMax',
$maxWidth);
}
}
$this->un_set('responsiveSliderHeightMax');
}
}
private function upgradeLimitSlideWidth() {
if (!$this->has('responsiveLimitSlideWidth')) {
if (!$this->has('responsiveSlideWidth')) {
/**
* Layout: Auto, fullpage
*/
if ($this->get('responsiveSlideWidthMax') >
0) {
$this->set('responsiveLimitSlideWidth',
1);
$this->set('responsiveSlideWidth', 1);
} else {
$this->set('responsiveLimitSlideWidth',
0);
$this->set('responsiveSlideWidth', 0);
}
} else {
/**
* Layout: full width
*/
if (!$this->get('responsiveSlideWidth')
&& !$this->get('responsiveSlideWidthDesktopLandscape')
&& !$this->get('responsiveSlideWidthTablet')
&& !$this->get('responsiveSlideWidthTabletLandscape')
&& !$this->get('responsiveSlideWidthMobile')
&& !$this->get('responsiveSlideWidthMobileLandscape'))
{
$this->set('responsiveLimitSlideWidth',
0);
} else {
$this->set('responsiveLimitSlideWidth',
1);
}
}
}
}
private function upgradeShowOn($pre = '') {
$this->upgradeShowOnDevice($pre . 'desktop');
$this->upgradeShowOnDevice($pre . 'tablet');
$this->upgradeShowOnDevice($pre . 'mobile');
}
private function upgradeShowOnDevice($device, $pre = '') {
if ($this->has($pre . $device)) {
$value = $this->get($pre . $device);
$this->un_set($pre . $device);
$this->set($device . 'portrait', $value);
$this->set($device . 'landscape', $value);
}
}
private function upgradeAdaptiveResponsiveMode() {
$responsiveMode = $this->get('responsive-mode');
if ($responsiveMode === 'adaptive') {
$this->set('responsiveScaleUp', 0);
}
}
private function upgradeCustomSliderSize() {
$deviceModes = array(
'desktop-landscape',
'tablet-portrait',
'tablet-landscape',
'mobile-portrait',
'mobile-landscape'
);
foreach ($deviceModes as $deviceMode) {
if (intval($this->get($deviceMode)) === 1) {
if (intval($this->get('slider-size-override'))
=== 0) {
$this->set('slider-size-override', 1);
}
$this->set('slider-size-override-' .
$deviceMode, 1);
$this->set('responsive-breakpoint-' .
$deviceMode . '-enabled', 1);
}
}
}
private function upgradeLoadingType() {
if (!empty($this->get('dependency'))) {
$this->set('loading-type',
'afterOnLoad');
} else {
if (!$this->has('loading-type') &&
$this->get('delay') > 0) {
$this->set('loading-type',
'afterDelay');
}
}
}
private function upgradeSlideBackgroundOptimize() {
$optimize = $this->get('optimize');
//Allow "Convert To Webp" if "Optimize" was
enabled earlier.
if (!empty($optimize) && $optimize) {
$this->set('optimize-webp', 1);
}
//Slide Background Resize
$isResizeBackgroundEnabled =
$this->get('optimize-background-image-custom');
$resizeBackgroundWidth =
$this->get('optimize-background-image-width');
if (!empty($optimize) && $optimize) {
$this->set('optimize-thumbnail-scale', 1);
$this->set('optimize-thumbnail-quality',
intval($this->get('optimize-quality', 70)));
if (!empty($isResizeBackgroundEnabled) &&
$isResizeBackgroundEnabled && !empty($resizeBackgroundWidth)) {
$this->set('optimize-scale', 1);
$this->set('optimize-slide-width-normal',
(int)$resizeBackgroundWidth);
}
}
}
private function upgradeThumbnailsControlSize() {
$isThumbnailEnabled =
$this->get('widget-thumbnail-enabled');
if ($isThumbnailEnabled) {
if (!$this->has('widget-thumbnail-tablet-width')
&& !$this->has('widget-thumbnail-mobile-width')) {
$defaultThumbnailWidth =
intval($this->get('widget-thumbnail-width', 100));
$this->set('widget-thumbnail-tablet-width',
$defaultThumbnailWidth);
$this->set('widget-thumbnail-mobile-width',
$defaultThumbnailWidth);
}
if (!$this->has('widget-thumbnail-tablet-height')
&& !$this->has('widget-thumbnail-mobile-height')) {
$defaultThumbnailHeight =
intval($this->get('widget-thumbnail-height', 60));
$this->set('widget-thumbnail-tablet-height',
$defaultThumbnailHeight);
$this->set('widget-thumbnail-mobile-height',
$defaultThumbnailHeight);
}
}
}
private function upgradeCarouselSideSpacing() {
if ($this->sliderType == 'carousel') {
if ($this->has('optimize-background-image-width'))
{
/**
* This setting was available only before version 3.5 so,
if we end up here then it is an old slider.
* Earlier we automatically created top and bottom side
spacing: (Slider Height - Slide Height) / 2
* so for old sliders we need to set those values for Side
Spacing top and bottom.
*/
$sliderHeight = intval($this->get('height'));
$slideHeight =
intval($this->get('slide-height'));
if ($sliderHeight > $slideHeight) {
$heightDifference = $sliderHeight - $slideHeight;
$spacingValue = intval($heightDifference / 2);
if
(!$this->get('side-spacing-desktop-enable')) {
$this->set('side-spacing-desktop-enable', 1);
$this->set('side-spacing-desktop',
$spacingValue . '|*|0|*|' . $spacingValue . '|*|0');
$this->set('height', ($sliderHeight -
$heightDifference));
}
}
}
}
}
private function upgradeShowcaseSideSpacing() {
if ($this->sliderType == 'showcase') {
if ($this->has('optimize-background-image-width'))
{
/**
* This setting was available only before version 3.5 so,
if we end up here then it is an old slider.
* Earlier we automatically created top and bottom side
spacing: (Slider Height - Slide Height) / 2
* so for old sliders we need to set those values for Side
Spacing top and bottom.
*/
$sliderHeight = intval($this->get('height'));
$slideHeight =
intval($this->get('slide-height'));
if ($sliderHeight > $slideHeight) {
$heightDifference = $sliderHeight - $slideHeight;
$spacingValue = intval($heightDifference / 2);
$this->set('side-spacing-desktop-enable',
1);
$this->set('side-spacing-desktop',
$spacingValue . '|*|20|*|' . $spacingValue . '|*|20');
$this->set('height', ($sliderHeight -
$heightDifference));
}
}
}
}
}PK:e�[��UU(Slider/SliderType/AbstractSliderType.phpnu�[���<?php
namespace Nextend\SmartSlider3\Slider\SliderType;
use Nextend\Framework\Pattern\GetAssetsPathTrait;
use Nextend\SmartSlider3\BackupSlider\ExportSlider;
use Nextend\SmartSlider3\BackupSlider\ImportSlider;
use Nextend\SmartSlider3\Slider\Slider;
abstract class AbstractSliderType {
use GetAssetsPathTrait;
public abstract function getName();
/**
* @param Slider $slider
*
* @return AbstractSliderTypeFrontend
*/
public abstract function createFrontend($slider);
/**
* @param Slider $slider
*
* @return AbstractSliderTypeCss
*/
public abstract function createCss($slider);
/**
*
* @return AbstractSliderTypeAdmin
*/
public abstract function createAdmin();
/**
* @param ExportSlider $export
* @param $slider
*/
public function export($export, $slider) {
}
/**
* @param ImportSlider $import
* @param $slider
*/
public function import($import, $slider) {
}
public function getItemDefaults() {
return array();
}
}PK:e�[�I8-Slider/SliderType/AbstractSliderTypeAdmin.phpnu�[���<?php
namespace Nextend\SmartSlider3\Slider\SliderType;
use Nextend\Framework\Form\Container\LayerWindow\ContainerSettings;
use Nextend\Framework\Form\Form;
use Nextend\Framework\Pattern\GetPathTrait;
use Nextend\Framework\Pattern\OrderableTrait;
use Nextend\SmartSlider3\Renderable\Component\ComponentSlide;
abstract class AbstractSliderTypeAdmin {
use GetPathTrait;
use OrderableTrait;
/** @var AbstractSliderType */
protected $type;
public function __construct($type) {
$this->type = $type;
}
public function getName() {
return $this->type->getName();
}
/**
* @return string
*/
public abstract function getIcon();
/**
* @return string
*/
public abstract function getLabel();
/**
* @return string
*/
public function getLabelFull() {
return $this->getLabel();
}
/**
* @param Form $form
*/
abstract public function prepareForm($form);
/**
* @param ContainerSettings $container
*/
public function renderSlideFields($container) {
}
/**
* @param ComponentSlide $component
*/
public function registerSlideAdminProperties($component) {
}
public function isDepreciated() {
return false;
}
}PK:e�[�P��+Slider/SliderType/AbstractSliderTypeCss.phpnu�[���<?php
namespace Nextend\SmartSlider3\Slider\SliderType;
use Nextend\Framework\Asset\Builder\BuilderCss;
use Nextend\Framework\Asset\Css\Css;
use Nextend\Framework\Asset\Css\Less\LessCompiler;
use Nextend\Framework\Notification\Notification;
use Nextend\Framework\Parser\Font;
use Nextend\Framework\Parser\Style;
use Nextend\Framework\Platform\Platform;
use Nextend\SmartSlider3\Application\Frontend\ApplicationTypeFrontend;
use Nextend\SmartSlider3\Slider\Feature\Responsive;
use Nextend\SmartSlider3\Slider\Slider;
abstract class AbstractSliderTypeCss {
/**
* @var Slider
*/
protected $slider;
public $sizes = array();
protected $context = array();
public $base = array();
/**
* AbstractSliderTypeCss constructor.
*
* @param Slider $slider
*/
public function __construct($slider) {
$this->slider = $slider;
$params = $slider->params;
if (!Platform::needStrongerCSS()) {
Css::addStaticGroupPreload(ApplicationTypeFrontend::getAssetsPath() .
'/dist/smartslider.min.css', 'smartslider');
}
$width = intval($params->get('width', 900));
$height = intval($params->get('height', 500));
if ($width < 10 || $height < 10) {
Notification::error(n2_('Slider size is too
small!'));
}
$this->context = array_merge($this->context, array(
'sliderid' =>
"~'#{$slider->elementId}'",
'width' => $width . 'px',
'height' => $height . 'px',
'canvas' => 0,
'count' => $slider->getSlidesCount(),
'margin' => '0px 0px 0px 0px',
'hasPerspective' => 0
));
$perspective = intval($params->get('perspective',
1500));
if ($perspective > 0) {
$this->context['hasPerspective'] = 1;
$this->context['perspective'] = $perspective .
'px';
}
}
public function getCSS() {
$css = '';
if (Platform::needStrongerCSS()) {
$cssPath = ApplicationTypeFrontend::getAssetsPath() .
'/dist/smartslider.min.css';
if (file_exists($cssPath)) {
$css = file_get_contents($cssPath);
}
}
foreach ($this->slider->less as $file => $context) {
$compiler = new LessCompiler();
$compiler->setVariables($context);
$css .= $compiler->compileFile($file);
}
$css .= implode('', $this->slider->css);
$mediaQueries =
$this->slider->features->responsive->mediaQueries;
foreach ($this->slider->cssDevice as $device => $styles) {
if (!empty($styles) && isset($mediaQueries[$device])) {
if (empty($mediaQueries[$device])) {
$css .= implode('', $styles);
} else {
if (!$this->slider->isAdmin) {
$css .= '@media ' .
implode(',', $mediaQueries[$device]) . '{' .
implode('', $styles) . '}';
} else {
$css .= str_replace('div#' .
$this->slider->elementId, 'body[data-device="' .
Responsive::$translation[$device] . '"] div#' .
$this->slider->elementId, implode('', $styles));
}
}
}
}
if (Platform::needStrongerCSS()) {
$css = preg_replace(array(
'/' . preg_quote('#' .
$this->slider->elementId) . '([\#\. \{,\[])/',
'/' . preg_quote('#' .
$this->slider->elementId) . '\.n2-ss-slider([\#\.
\{,\[])/',
'/\.n2-ss-align([\#\. \{,\[])/',
'/\.n2-ss-slider([\#\. \{,\[])/'
), array(
'#' . $this->slider->elementId .
'#' . $this->slider->elementId . '#' .
$this->slider->elementId . '$1',
'#' . $this->slider->elementId .
'#' . $this->slider->elementId . '$1',
'#' . $this->slider->elementId .
'-align#' . $this->slider->elementId .
'-align$1',
'#' . $this->slider->elementId .
'#' . $this->slider->elementId . '$1'
), $css);
}
$css .=
$this->slider->params->get('custom-css-codes',
'');
return $css;
}
public function initSizes() {
$this->sizes['marginVertical'] = 0;
$this->sizes['marginHorizontal'] = 0;
$this->sizes['width'] =
intval($this->context['width']);
$this->sizes['height'] =
intval($this->context['height']);
$this->sizes['canvasWidth'] =
intval($this->context['canvaswidth']);
$this->sizes['canvasHeight'] =
intval($this->context['canvasheight']);
}
protected function setContextFonts($matches, $fonts, $value) {
$this->context['font' . $fonts] = '~".'
. $matches[0] . '"';
$font = new Font($value);
$this->context['font' . $fonts . 'text'] =
'";' . $font->printTab() . '"';
$font->mixinTab('Link');
$this->context['font' . $fonts . 'link'] =
'";' . $font->printTab('Link') .
'"';
$font->mixinTab('Link:Hover', 'Link');
$this->context['font' . $fonts . 'hover'] =
'";' . $font->printTab('Link:Hover') .
'"';
}
protected function setContextStyles($selector, $styles, $value) {
$this->context['style' . $styles] =
'~".' . $selector . '"';
$style = new Style($value);
$this->context['style' . $styles . 'normal']
= '";' . $style->printTab('Normal') .
'"';
$this->context['style' . $styles . 'hover']
= '";' . $style->printTab('Hover') .
'"';
}
}PK:e�[.�kyFyF0Slider/SliderType/AbstractSliderTypeFrontend.phpnu�[���<?php
namespace Nextend\SmartSlider3\Slider\SliderType;
use Nextend\Framework\Asset\Builder\BuilderJs;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\Data\Data;
use Nextend\Framework\Filesystem\Filesystem;
use Nextend\Framework\Parser\Color;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Application\Frontend\ApplicationTypeFrontend;
use Nextend\SmartSlider3\Slider\Slider;
use Nextend\SmartSlider3\Widget\SliderWidget;
abstract class AbstractSliderTypeFrontend {
/**
* @var Slider
*/
protected $slider;
protected $jsDependency = array(
'documentReady',
'smartslider-frontend'
);
protected $javaScriptProperties;
/** @var SliderWidget */
protected $widgets;
protected $shapeDividerAdded = false;
protected $style = '';
public function __construct($slider) {
$this->slider = $slider;
$this->enqueueAssets();
}
public function addJSDependency($dependency) {
$this->jsDependency[] = $dependency;
}
protected $classes = array();
public function addClass($className) {
$this->classes[] = $className;
}
/**
* @param AbstractSliderTypeCss $css
*
* @return string
*/
public function render($css) {
$this->javaScriptProperties =
$this->slider->features->generateJSProperties();
$this->widgets = new SliderWidget($this->slider);
ob_start();
$this->renderType($css);
return ob_get_clean();
}
/**
* @param AbstractSliderTypeCss $css
*
* @return string
*/
protected abstract function renderType($css);
protected function getSliderClasses() {
return $this->slider->getAlias() . ' ' .
implode('', $this->classes);
}
protected function openSliderElement() {
$attributes = array(
'id' =>
$this->slider->elementId,
'data-creator' => 'Smart Slider 3',
'data-responsive' =>
$this->slider->features->responsive->type,
'class' => 'n2-ss-slider n2-ow
n2-has-hover n2notransition ' . $this->getSliderClasses(),
);
if ($this->slider->isLegacyFontScale()) {
$attributes['data-ss-legacy-font-scale'] = 1;
}
return Html::openTag('div', $attributes);
}
protected function closeSliderElement() {
return '</div>';
}
public function getDefaults() {
return array();
}
/**
* @param $params Data
*/
public function limitParams($params) {
}
protected function encodeJavaScriptProperties() {
$initCallback =
implode($this->javaScriptProperties['initCallbacks']);
unset($this->javaScriptProperties['initCallbacks']);
$encoded = array();
foreach ($this->javaScriptProperties as $k => $v) {
$encoded[] = '"' . $k . '":' .
json_encode($v);
}
$encoded[] = '"initCallbacks":function(){' .
$initCallback . '}';
return '{' . implode(',', $encoded) .
'}';
}
protected function initParticleJS() {
$particle =
$this->slider->params->get('particle');
if ($this->slider->isAdmin || empty($particle)) {
return;
}
$particle = new Data($particle, true);
$preset = $particle->get('preset', '0');
if ($preset != '0') {
Js::addStaticGroup(ResourceTranslator::toPath('$ss3-pro-frontend$/dist/particle.min.js'),
'particles');
$custom = $particle->get('custom', '');
if ($preset == 'custom' && is_array($custom))
{
$jsProp = $custom;
} else {
$jsProp =
json_decode(Filesystem::readFile(ResourceTranslator::toPath('$ss3-pro-frontend$/js/particle/presets/'
. $particle->get('preset') . '.json')), true);
$color =
Color::colorToSVG($particle->get('color'));
$jsProp['particles']["color"]["value"] =
'#' . $color[0];
$jsProp['particles']["opacity"]["value"] =
$color[1];
$lineColor =
Color::colorToSVG($particle->get('line-color'));
$jsProp['particles']["line_linked"]["color"]
= '#' . $lineColor[0];
$jsProp['particles']["line_linked"]["opacity"]
= $lineColor[1];
$hover = $particle->get('hover', 0);
if ($hover == '0') {
$jsProp['interactivity']["events"]["onhover"]['enable']
= 0;
} else {
$jsProp['interactivity']["events"]["onhover"]['enable']
= 1;
$jsProp['interactivity']["events"]["onhover"]['mode']
= $hover;
}
$click = $particle->get('click', 0);
if ($click == '0') {
$jsProp['interactivity']["events"]["onclick"]['enable']
= 0;
} else {
$jsProp['interactivity']["events"]["onclick"]['enable']
= 1;
$jsProp['interactivity']["events"]["onclick"]['mode']
= $click;
}
$jsProp['particles']["number"]["value"] =
max(10, min(200, $particle->get('number')));
$jsProp['particles']["move"]["speed"] =
max(1, min(60, $particle->get('speed')));
}
$jsProp['mobile'] =
intval($particle->get('mobile', 0));
$this->javaScriptProperties['particlejs'] =
$jsProp;
}
}
protected function renderShapeDividers() {
$shapeDividers =
$this->slider->params->get('shape-divider');
if (!empty($shapeDividers)) {
$shapeDividers = json_decode($shapeDividers, true);
if ($shapeDividers) {
$this->renderShapeDivider('top',
$shapeDividers['top']);
$this->renderShapeDivider('bottom',
$shapeDividers['bottom']);
}
}
}
private function renderShapeDivider($side, $params) {
$data = new Data($params);
$type = $data->get('type', "0");
if ($type != "0") {
preg_match('/([a-z]+)\-(.*)/', $type, $matches);
$type = $matches[2];
switch ($matches[1]) {
case 'bi':
$type = 'bicolor/' . $type;
break;
}
$file =
ResourceTranslator::toPath('$ss3-pro-frontend$/shapedivider/' .
$type . '.svg');
if (Filesystem::existsFile($file)) {
$animate = $data->get('animate') ==
'1';
$id = $this->slider->elementId .
'-shape-divider-' . $side;
$selector = '.n2-ss-slider #' . $id;
$height = max(0,
$data->get('desktopportraitheight'));
if ($height > 0) {
$this->slider->addDeviceCSS('all',
$selector . '{' . 'height:' . $height .
'px}');
} else {
$this->slider->addDeviceCSS('all',
$selector . '{' . 'display:none}');
}
$width = $data->get('desktopportraitwidth');
if ($width != 100) {
$this->slider->addDeviceCSS('all',
$selector . ' .n2-ss-shape-divider-inner{' . 'width:' .
$width . '%;margin: 0 ' . (($width - 100) / -2) .
'%;}');
}
foreach
($this->slider->features->responsive->sizes as $device =>
$size) {
if ($device === 'desktopPortrait') continue;
$device = strtolower($device);
$deviceHeight = max(0, $data->get($device .
'height'));
if ($height != $deviceHeight) {
if ($height > 0) {
$this->slider->addDeviceCSS($device,
$selector . '{' . 'height:' . $deviceHeight .
'px}');
} else {
$this->slider->addDeviceCSS($device,
$selector . '{' . 'display:none}');
}
}
$deviceWidth = $data->get($device .
'width');
if ($width != $deviceWidth) {
$this->slider->addDeviceCSS($device,
$selector . ' .n2-ss-shape-divider-inner{' . 'width:' .
$deviceWidth . '%;margin: 0 ' . (($deviceWidth - 100) / -2) .
'%;}');
}
}
$scroll = $data->get('scroll', null);
$outer = array(
'id' => $id,
'class' =>
'n2-ss-shape-divider n2-ss-shape-divider-' . $side,
'data-ss-sd-animate' => ($animate ? 1 :
0),
'data-ss-sd-scroll' => $scroll,
'data-ss-sd-speed' =>
$data->get('speed', 100),
'data-ss-sd-side' => $side
);
$inner = array(
'class' =>
'n2-ss-shape-divider-inner',
);
switch ($scroll) {
case 'shrink':
case 'grow':
$inner['style'] =
'transform:scaleY(0)';
break;
}
$svg = Filesystem::readFile($file);
if (!$animate) {
/**
* when not animated, we do not need the start state of
the svg
*/
$svg =
preg_replace_callback('/((to-)?d)(=".*?")/', function
($match) {
if ($match[1] === 'd') {
return '';
}
return 'd' . $match[3];
}, $svg);
}
/**
* compress svg
*/
$svg = preg_replace('/\s\s+/', ' ',
preg_replace('/[\n\r\t]/', '', $svg));
if ($side == 'bottom') {
if ($data->get('flip') == '1') {
$svg = SVGFlip::mirror($svg, true, true);
} else {
$svg = SVGFlip::mirror($svg, false, true);
}
} else {
if ($data->get('flip') == '1') {
$svg = SVGFlip::mirror($svg, true, false);
}
}
echo Html::tag('div', $outer,
Html::tag('div', $inner, str_replace(array(
'#000000',
'#000010'
), array(
Color::colorToRGBA($data->get('color')),
Color::colorToRGBA($data->get('color2'))
), $svg)));
if (!$this->shapeDividerAdded) {
$path =
ResourceTranslator::toPath('$ss3-pro-frontend$/dist/shapedivider.min.js');
if (file_exists($path)) {
$this->javaScriptProperties['initCallbacks'][] =
file_get_contents($path);
} else {
}
$this->shapeDividerAdded = true;
}
}
}
}
/**
* @return string
*/
public function getScript() {
return '';
}
public function getStyle() {
return $this->style;
}
public function setJavaScriptProperty($key, $value) {
$this->javaScriptProperties[$key] = $value;
}
public function enqueueAssets() {
Js::addStaticGroup(ApplicationTypeFrontend::getAssetsPath() .
'/dist/smartslider-frontend.min.js',
'smartslider-frontend');
}
public function handleSliderMinHeight($minHeight) {
$this->slider->addDeviceCSS('all', 'div#'
. $this->slider->elementId . ' .n2-ss-slider-1{min-height:'
. $minHeight . 'px;}');
}
public function displaySizeSVGs($css, $hasMaxWidth = false) {
if (!$this->slider->isAdmin &&
$this->slider->features->responsive->type ==
'fullpage' &&
!intval($this->slider->params->get('responsiveConstrainRatio',
0))) {
/**
* Full page responsive type with constrain ratio off does not
use the initial slider size to prevent too large heights.
*/
return;
}
$attrs = array(
'xmlns' =>
"http://www.w3.org/2000/svg",
'viewBox' => '0 0 ' .
$css->base['sliderWidth'] . ' ' .
$css->base['sliderHeight'],
'data-related-device' =>
"desktopPortrait",
'class' => "n2-ow
n2-ss-preserve-size n2-ss-preserve-size--slider n2-ss-slide-limiter"
);
if ($hasMaxWidth) {
$attrs['style'] = 'max-width:' .
$css->base['sliderWidth'] . 'px';
}
$svgs = array(
Html::tag('svg', $attrs, '')
);
foreach ($this->slider->features->responsive->sizes as
$device => $size) {
if ($device === 'desktopPortrait') continue;
if ($size['customHeight'] &&
$size['width'] > 0 && $size['height'] >
0) {
$attrs['viewBox'] = '0 0 '
. $size['width'] . ' ' . $size['height'];
$attrs['data-related-device'] = $device;
if ($hasMaxWidth) {
$attrs['style'] = 'max-width:' .
$size['width'] . 'px';
}
$svgs[] = Html::tag('svg', $attrs, '');
$styles = array(
'div#' . $this->slider->elementId .
'
.n2-ss-preserve-size[data-related-device="desktopPortrait"]
{display:none}',
'div#' . $this->slider->elementId .
' .n2-ss-preserve-size[data-related-device="' . $device .
'"] {display:block}'
);
$this->slider->addDeviceCSS(strtolower($device),
implode('', $styles));
}
}
echo implode('', $svgs);
}
protected function initSliderBackground($selector) {
$params = $this->slider->params;
$backgroundImage = $params->get('background');
$backgroundColor = $params->get('background-color',
'');
$sliderCSS2 = '';
if (!empty($backgroundImage)) {
$sliderCSS2 .= 'background-image: URL(' .
ResourceTranslator::toUrl($backgroundImage) . ');';
}
if (!empty($backgroundColor)) {
$rgba = Color::hex2rgba($backgroundColor);
if ($rgba[3] != 0) {
$sliderCSS2 .= 'background-color:RGBA(' .
$rgba[0] . ',' . $rgba[1] . ',' . $rgba[2] .
',' . round($rgba[3] / 127, 2) . ');';
}
}
if (!empty($sliderCSS2)) {
$this->slider->addCSS('div#' .
$this->slider->elementId . ' ' . $selector . '{'
. $sliderCSS2 . '}');
if (!empty($backgroundImage)) {
$optimizedData =
$this->slider->features->optimize->optimizeImageWebP($backgroundImage,
array(
'optimize' =>
$this->slider->params->get('optimize-slider-webp', 0),
'quality' =>
intval($this->slider->params->get('optimize-slider-quality',
70)),
'resize' =>
$this->slider->params->get('optimize-slider-scale', 0),
'defaultWidth' =>
intval($this->slider->params->get('optimize-slider-width-normal',
1920)),
'mediumWidth' =>
intval($this->slider->params->get('optimize-slider-width-tablet',
1200)),
'mediumHeight' =>
intval($this->slider->params->get('optimize-slider-height-tablet',
0)),
'smallWidth' =>
intval($this->slider->params->get('optimize-slider-width-mobile',
500)),
'smallHeight' =>
intval($this->slider->params->get('optimize-slider-height-mobile',
0)),
));
if (isset($optimizedData['normal'])) {
$this->slider->addImage($optimizedData['normal']['src']);
$this->slider->addCSS('.n2webp div#' .
$this->slider->elementId . ' ' . $selector .
'{background-image: URL(' .
$optimizedData['normal']['src'] . ')}');
}
if (isset($optimizedData['medium'])) {
$this->slider->addImage($optimizedData['medium']['src']);
$this->slider->addCSS('@media (max-width:
' . $optimizedData['medium']['width'] . 'px)
{.n2webp div#' . $this->slider->elementId . ' ' .
$selector . '{background-image: URL(' .
$optimizedData['medium']['src'] . ')}}');
}
if (isset($optimizedData['small'])) {
$this->slider->addImage($optimizedData['small']['src']);
$this->slider->addCSS('@media (max-width:
' . $optimizedData['small']['width'] . 'px)
{.n2webp div#' . $this->slider->elementId . ' ' .
$selector . '{background-image: URL(' .
$optimizedData['small']['src'] . ')}}');
}
}
}
}
protected function getBackgroundVideo($params) {
$mp4 =
ResourceTranslator::toUrl($params->get('backgroundVideoMp4',
''));
if (empty($mp4)) {
return '';
}
$attributes = array();
if ($params->get('backgroundVideoMuted', 1)) {
$attributes['muted'] = 'muted';
}
if ($params->get('backgroundVideoLoop', 1)) {
$attributes['loop'] = 'loop';
}
$objectFit = 'cover';
if ($params->get('backgroundVideoMode',
'fill') == 'fit') {
$objectFit = 'contain';
}
return Html::tag('video', $attributes + array(
'class' =>
'n2-ss-slider-background-video n2-ow',
'style' =>
'object-fit:' . $objectFit,
'playsinline' => 1,
'webkit-playsinline' => 1,
'data-keepplaying' => 1,
'preload' => 'none'
), Html::tag("source", array(
"src" => $mp4,
"type" => "video/mp4"
), '', false));
}
}PK:e�[�rq��+Slider/SliderType/Block/SliderTypeBlock.phpnu�[���<?php
namespace Nextend\SmartSlider3\Slider\SliderType\Block;
use Nextend\SmartSlider3\Slider\SliderType\AbstractSliderType;
class SliderTypeBlock extends AbstractSliderType {
public function getName() {
return 'block';
}
public function createFrontend($slider) {
return new SliderTypeBlockFrontend($slider);
}
public function createCss($slider) {
return new SliderTypeBlockCss($slider);
}
public function createAdmin() {
return new SliderTypeBlockAdmin($this);
}
public function export($export, $slider) {
$export->addImage($slider['params']->get('background',
''));
$export->addImage($slider['params']->get('backgroundVideoMp4',
''));
}
public function import($import, $slider) {
$slider['params']->set('background',
$import->fixImage($slider['params']->get('background',
'')));
$slider['params']->set('backgroundVideoMp4',
$import->fixImage($slider['params']->get('backgroundVideoMp4',
'')));
}
}PK:e�[wE�)0Slider/SliderType/Block/SliderTypeBlockAdmin.phpnu�[���<?php
namespace Nextend\SmartSlider3\Slider\SliderType\Block;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\Form\Container\ContainerRowGroup;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\Grouping;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Text\Color;
use Nextend\Framework\Form\Element\Text\Number;
use Nextend\Framework\Form\Element\Textarea;
use Nextend\Framework\Form\Fieldset\FieldsetRow;
use Nextend\Framework\Form\Fieldset\LayerWindow\FieldsetLayerWindow;
use Nextend\Framework\Form\Insert\InsertAfter;
use Nextend\Framework\Form\Insert\InsertBefore;
use Nextend\SmartSlider3\Slider\SliderType\AbstractSliderTypeAdmin;
use Nextend\SmartSlider3Pro\Form\Element\PostBackgroundAnimation;
use
Nextend\SmartSlider3Pro\PostBackgroundAnimation\PostBackgroundAnimationManager;
class SliderTypeBlockAdmin extends AbstractSliderTypeAdmin {
protected $ordering = 2;
public function getLabel() {
return n2_('Block');
}
public function getIcon() {
return 'ssi_64 ssi_64--block';
}
public function prepareForm($form) {
$form->getElement('/autoplay')
->remove();
$tableBackground = new ContainerTable(new
InsertBefore($form->getElement('/animations/effects')),
'slider-type-block-background', n2_('Background
animation'));
$rowKenBurns = new FieldsetRow($tableBackground,
'slider-type-block-kenburns');
new PostBackgroundAnimation($rowKenBurns,
'kenburns-animation', n2_('Ken Burns effect'),
'50|*|50|*|', array(
'relatedFields' => array(
'sliderkenburns-animation-speed',
'sliderkenburns-animation-strength'
)
));
new Select($rowKenBurns, 'kenburns-animation-speed',
n2_('Speed'), 'default', array(
'options' => array(
'default' => n2_('Default'),
'superSlow' => n2_('Super slow') .
' 0.25x',
'slow' => n2_('Slow') . '
0.5x',
'normal' => n2_('Normal') .
' 1x',
'fast' => n2_('Fast') . '
2x',
'superFast' => n2_('Super fast') .
' 4x'
)
));
new Select($rowKenBurns, 'kenburns-animation-strength',
n2_('Strength'), 'default', array(
'options' => array(
'default' => n2_('Default'),
'superSoft' => n2_('Super soft') .
' 0.3x',
'soft' => n2_('Soft') .
' 0.6x',
'normal' => n2_('Normal') .
' 1x',
'strong' => n2_('Strong') .
' 1.5x',
'superStrong' => n2_('Super strong')
. ' 2x'
)
));
$rowGroup = new ContainerRowGroup(new
InsertAfter($form->getElement('/general/design/design-1')),
'slider-type-block-group-general', false);
$rowStyle = new FieldsetRow($rowGroup,
'slider-type-simple-settings-style');
new Number($rowStyle, 'border-width', n2_('Border
width'), 0, array(
'unit' => 'px',
'wide' => 3,
'relatedFields' =>
array('sliderborder-color')
));
new Color($rowStyle, 'border-color', n2_('Border
color'), '3E3E3Eff', array(
'alpha' => true
));
new Number($rowStyle, 'border-radius', n2_('Border
radius'), 0, array(
'unit' => 'px',
'wide' => 3
));
$rowOther = new FieldsetRow($rowGroup,
'slider-type-block-other');
new Textarea($rowOther, 'slider-css',
n2_('Slider') . ' CSS', '', array(
'height' => 26,
'resize' => 'both'
));
/**
* Removing slider settings which are unnecessary for Block slider
type.
*/
$form->getElement('/controls/general')
->remove();
$form->getElement('/general/alias/alias-1/alias-slideswitch')
->remove();
$form->getElement('/controls/widget-arrow')
->remove();
$form->getElement('/controls/widget-bullet')
->remove();
$form->getElement('/controls/widget-bar')
->remove();
$form->getElement('/controls/widget-thumbnail')
->remove();
$form->getElement('/animations/layer-animations/layer-animations/playonce')
->remove();
$form->getElement('/optimize/optimize-slide/optimize-slide-loading-mode')
->remove();
$form->getElement('/slides/slides-randomize')
->remove();
$form->getElement('/slides/other')
->remove();
$form->getElement('/developer/developer/developer-1/controlsBlockCarouselInteraction')
->remove();
$form->getElement('/controls/widget-fullscreen')
->remove();
}
public function renderSlideFields($container) {
$dataToFields = array();
$tableAnimation = new FieldsetLayerWindow($container,
'fields-slide-animation', n2_('Animation'));
PostBackgroundAnimationManager::enqueue($container->getForm());
$rowKenBurns = new Grouping($tableAnimation,
'slide-settings-animation-ken-burns');
new PostBackgroundAnimation($rowKenBurns,
'kenburns-animation', n2_('Ken Burns effect'),
'', array(
'relatedFields' => array(
'layerkenburns-animation-speed',
'layerkenburns-animation-strength'
)
));
$dataToFields[] = [
'name' => 'kenburns-animation',
'id' => 'layerkenburns-animation',
'def' => '50|*|50|*'
];
new Select($rowKenBurns, 'kenburns-animation-speed',
n2_('Speed'), '', array(
'options' => array(
'default' => n2_('Default'),
'superSlow' => n2_('Super slow') .
' 0.25x',
'slow' => n2_('Slow') . '
0.5x',
'normal' => n2_('Normal') .
' 1x',
'fast' => n2_('Fast') . '
2x',
'superFast' => n2_('Super fast' .
' 4x')
)
));
$dataToFields[] = [
'name' => 'kenburns-animation-speed',
'id' =>
'layerkenburns-animation-speed',
'def' => 'default'
];
new Select($rowKenBurns, 'kenburns-animation-strength',
n2_('Strength'), '', array(
'options' => array(
'default' => n2_('Default'),
'superSoft' => n2_('Super soft') .
' 0.3x',
'soft' => n2_('Soft') .
' 0.6x',
'normal' => n2_('Normal') .
' 1x',
'strong' => n2_('Strong') .
' 1.5x',
'superStrong' => n2_('Super strong')
. ' 2x'
)
));
$dataToFields[] = [
'name' => 'kenburns-animation-strength',
'id' =>
'layerkenburns-animation-strength',
'def' => 'default'
];
Js::addInline("_N2.r('SectionSlide', function(){
_N2.SectionSlide.addExternalDataToField(" . json_encode($dataToFields)
. ");});");
}
public function registerSlideAdminProperties($component) {
$component->createProperty('kenburns-animation',
'50|*|50|*|');
$component->createProperty('kenburns-animation-speed',
'default');
$component->createProperty('kenburns-animation-strength',
'default');
}
}PK;e�[/����.Slider/SliderType/Block/SliderTypeBlockCss.phpnu�[���<?php
namespace Nextend\SmartSlider3\Slider\SliderType\Block;
use Nextend\Framework\Parser\Color;
use Nextend\SmartSlider3\Slider\SliderType\AbstractSliderTypeCss;
class SliderTypeBlockCss extends AbstractSliderTypeCss {
public function __construct($slider) {
parent::__construct($slider);
$params = $this->slider->params;
$width = intval($this->context['width']);
$height = intval($this->context['height']);
$borderWidth =
$params->getIfEmpty('border-width', 0);
$borderColor =
$params->get('border-color');
$this->context['border'] = $borderWidth .
'px';
$rgba = Color::hex2rgba($borderColor);
$this->context['borderrgba'] = 'RGBA(' .
$rgba[0] . ',' . $rgba[1] . ',' . $rgba[2] .
',' . round($rgba[3] / 127, 2) . ')';
$this->context['borderRadius'] =
$params->get('border-radius') . 'px';
$this->context['backgroundSize'] =
$params->getIfEmpty('background-size', 'inherit');
$this->context['backgroundAttachment'] =
$params->get('background-fixed') ? 'fixed' :
'scroll';
$this->context['canvaswidth'] = $width .
"px";
$this->context['canvasheight'] = $height .
"px";
$this->base = array(
'slideOuterWidth' => $width,
'slideOuterHeight' => $height,
'sliderWidth' => $width,
'sliderHeight' => $height,
'slideWidth' => $width,
'slideHeight' => $height
);
$this->initSizes();
$this->slider->addLess(SliderTypeBlock::getAssetsPath() .
'/style.n2less', $this->context);
}
}PK;e�[Ӱ!��3Slider/SliderType/Block/SliderTypeBlockFrontend.phpnu�[���<?php
namespace Nextend\SmartSlider3\Slider\SliderType\Block;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\Data\Data;
use Nextend\Framework\Sanitize;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Slider\SliderType\AbstractSliderTypeFrontend;
class SliderTypeBlockFrontend extends AbstractSliderTypeFrontend {
public function getDefaults() {
return array(
'background' => '',
'background-size' => 'cover',
'background-fixed' => 0,
'slider-css' => '',
'border-width' => 0,
'border-color' => '3E3E3Eff',
'border-radius' => 0,
'kenburns-animation' => ''
);
}
protected function renderType($css) {
$params = $this->slider->params;
Js::addStaticGroup(SliderTypeBlock::getAssetsPath() .
'/dist/ss-block.min.js', 'ss-block');
$this->jsDependency[] = 'ss-block';
$sliderCSS = $params->get('slider-css');
$this->initSliderBackground('.n2-ss-slider-1');
$this->initParticleJS();
echo $this->openSliderElement();
ob_start();
$slide = $this->slider->getActiveSlide();
$slide->finalize();
?>
<div class="n2-ss-slider-1 n2-ow" style="<?php
echo Sanitize::esc_attr($sliderCSS); ?>">
<div class="n2-ss-slider-2 n2-ow">
<?php
echo $this->getBackgroundVideo($params);
echo Html::tag('div', array('class'
=> 'n2-ss-slide-backgrounds n2-ow-all'),
$slide->background);
?>
<div class="n2-ss-slider-3 n2-ow">
<?php
$this->displaySizeSVGs($css);
echo $this->slider->staticHtml;
echo Html::tag('div',
Html::mergeAttributes($slide->attributes, $slide->linkAttributes,
array(
'class' => 'n2-ss-slide n2-ow
' . $slide->classes,
'style' => $slide->style
)), $slide->getHTML());
?>
</div>
<?php
$this->renderShapeDividers();
?>
</div>
</div>
<?php
echo $this->widgets->wrapSlider(ob_get_clean());
echo $this->closeSliderElement();
$this->style .= $css->getCSS();
}
public function getScript() {
return "_N2.r(" .
json_encode(array_unique($this->jsDependency)) . ",function(){new
_N2.SmartSliderBlock('{$this->slider->elementId}', " .
$this->encodeJavaScriptProperties() . ");});";
}
/**
* @param $params Data
*/
public function limitParams($params) {
$params->loadArray(array(
'controlsScroll' => 0,
'controlsDrag' => 0,
'controlsTouch' => 0,
'controlsKeyboard' => 0,
'blockCarouselInteraction' => 1,
'autoplay' => 0,
'autoplayStart' => 0,
'widget-arrow-enabled' => 0,
'widget-bullet-enabled' => 0,
'widget-autoplay-enabled' => 0,
'widget-indicator-enabled' => 0,
'widget-bar-enabled' => 0,
'widget-thumbnail-enabled' => 0,
'widget-fullscreen-enabled' => 0,
'randomize' => 0,
'randomizeFirst' => 0,
'randomize-cache' => 0,
'maximumslidecount' => 1,
'imageload' => 0,
'imageloadNeighborSlides' => 0,
'maintain-session' => 0,
'global-lightbox' => 0
));
}
}PK;e�[�k�-Slider/SliderType/Simple/SliderTypeSimple.phpnu�[���<?php
namespace Nextend\SmartSlider3\Slider\SliderType\Simple;
use Nextend\SmartSlider3\Slider\SliderType\AbstractSliderType;
class SliderTypeSimple extends AbstractSliderType {
public function getName() {
return 'simple';
}
public function createFrontend($slider) {
return new SliderTypeSimpleFrontend($slider);
}
public function createCss($slider) {
return new SliderTypeSimpleCss($slider);
}
public function createAdmin() {
return new SliderTypeSimpleAdmin($this);
}
public function export($export, $slider) {
$export->addImage($slider['params']->get('background',
''));
$export->addImage($slider['params']->get('backgroundVideoMp4',
''));
}
public function import($import, $slider) {
$slider['params']->set('background',
$import->fixImage($slider['params']->get('background',
'')));
$slider['params']->set('backgroundVideoMp4',
$import->fixImage($slider['params']->get('backgroundVideoMp4',
'')));
}
}PK;e�[��V�R=R=2Slider/SliderType/Simple/SliderTypeSimpleAdmin.phpnu�[���<?php
namespace Nextend\SmartSlider3\Slider\SliderType\Simple;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\Form\Container\ContainerRowGroup;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\Grouping;
use Nextend\Framework\Form\Element\Hidden;
use Nextend\Framework\Form\Element\MarginPadding;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Radio;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Select\Easing;
use Nextend\Framework\Form\Element\Select\Skin;
use Nextend\Framework\Form\Element\Text\Color;
use Nextend\Framework\Form\Element\Text\Number;
use Nextend\Framework\Form\Element\Text\NumberAutoComplete;
use Nextend\Framework\Form\Element\Textarea;
use Nextend\Framework\Form\Fieldset\FieldsetRow;
use Nextend\Framework\Form\Fieldset\LayerWindow\FieldsetLayerWindow;
use Nextend\Framework\Form\Insert\InsertAfter;
use Nextend\Framework\Form\Insert\InsertBefore;
use Nextend\SmartSlider3\BackgroundAnimation\BackgroundAnimationManager;
use Nextend\SmartSlider3\Form\Element\BackgroundAnimation;
use Nextend\SmartSlider3\Slider\SliderType\AbstractSliderTypeAdmin;
use Nextend\SmartSlider3Pro\Form\Element\PostBackgroundAnimation;
use
Nextend\SmartSlider3Pro\PostBackgroundAnimation\PostBackgroundAnimationManager;
class SliderTypeSimpleAdmin extends AbstractSliderTypeAdmin {
protected $ordering = 1;
public function getLabel() {
return n2_('Simple');
}
public function getLabelFull() {
return n2_x('Simple slider', 'Slider type');
}
public function getIcon() {
return 'ssi_64 ssi_64--slider';
}
public function prepareForm($form) {
$tableMainAnimation = new ContainerTable(new
InsertBefore($form->getElement('/animations/effects')),
'slider-type-simple-main-animation', n2_('Main
animation'));
$rowMainAnimation = new FieldsetRow($tableMainAnimation,
'slider-type-simple-main-animation-1');
new Select($rowMainAnimation, 'animation', n2_('Main
animation'), 'horizontal', array(
'options' => array(
'no' => n2_('No
animation'),
'fade' =>
n2_('Fade'),
'crossfade' =>
n2_('Crossfade'),
'horizontal' =>
n2_('Horizontal'),
'vertical' =>
n2_('Vertical'),
'horizontal-reversed' => n2_('Horizontal
- reversed'),
'vertical-reversed' => n2_('Vertical -
reversed')
),
'relatedValueFields' => array(
array(
'values' => array(
'fade',
'crossfade',
'horizontal',
'vertical',
'horizontal-reversed',
'vertical-reversed'
),
'field' => array(
'slideranimation-duration',
'slideranimation-delay',
'slideranimation-easing'
)
)
)
));
new NumberAutoComplete($rowMainAnimation,
'animation-duration', n2_('Duration'), 800, array(
'min' => 0,
'values' => array(
800,
1500,
2000
),
'unit' => 'ms',
'wide' => 5
));
new Number($rowMainAnimation, 'animation-delay',
n2_('Delay'), 0, array(
'min' => 0,
'unit' => 'ms',
'wide' => 5
));
new Easing($rowMainAnimation, 'animation-easing',
n2_('Easing'), 'easeOutQuad');
new OnOff($rowMainAnimation, 'carousel',
n2_x('Carousel', 'Feature'), 1, array(
'tipLabel' => n2_x('Carousel',
'Feature'),
'tipDescription' => n2_('If you turn off
this option, you can\'t switch to the first slide from the last
one.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1780-simple-slider-type#carousel',
'relatedFieldsOn' => array(
'slidercontrolsBlockCarouselInteraction'
)
));
$tableBackground = new ContainerTable(new
InsertBefore($form->getElement('/animations/effects')),
'slider-type-simple-background', n2_('Background
animation'));
$rowBackgroundAnimation = new FieldsetRow($tableBackground,
'slider-type-simple-background-animation');
new BackgroundAnimation($rowBackgroundAnimation,
'background-animation', n2_('Background animation'),
'', array(
'relatedFields' => array(
'sliderbackground-animation-speed',
'slideranimation-shifted-background-animation'
)
));
new Hidden($rowBackgroundAnimation,
'background-animation-color', '333333ff');
new Select($rowBackgroundAnimation,
'background-animation-speed', n2_('Speed'),
'normal', array(
'options' => array(
'superSlow10' => n2_('Super slow') .
' 10x',
'superSlow' => n2_('Super slow') .
' 3x',
'slow' => n2_('Slow') .
' 1.5x',
'normal' => n2_('Normal') .
' 1x',
'fast' => n2_('Fast') .
' 0.75x',
'superFast' => n2_('Super fast') .
' 0.5x'
)
));
new Radio($rowBackgroundAnimation,
'animation-shifted-background-animation',
n2_('Shifted'), 'auto', array(
'tipLabel' => n2_('Shifted'),
'tipDescription' => n2_('The background and
the main animation plays simultaneously or shifted.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1780-simple-slider-type#shifted',
'options' => array(
'auto' => n2_('Auto'),
'0' => n2_('Off'),
'1' => n2_('On')
)
));
$rowKenBurns = new FieldsetRow($tableBackground,
'slider-type-simple-kenburns-animation');
new PostBackgroundAnimation($rowKenBurns,
'kenburns-animation', n2_('Ken Burns effect'),
'50|*|50|*|', array(
'relatedFields' => array(
'sliderkenburns-animation-speed',
'sliderkenburns-animation-strength'
)
));
new Select($rowKenBurns, 'kenburns-animation-speed',
n2_('Speed'), 'default', array(
'options' => array(
'default' => n2_('Default'),
'superSlow' => n2_('Super slow') .
' 0.25x',
'slow' => n2_('Slow') . '
0.5x',
'normal' => n2_('Normal') .
' 1x',
'fast' => n2_('Fast') . '
2x',
'superFast' => n2_('Super fast') .
' 4x'
)
));
new Select($rowKenBurns, 'kenburns-animation-strength',
n2_('Strength'), 'default', array(
'options' => array(
'default' => n2_('Default'),
'superSoft' => n2_('Super soft') .
' 0.3x',
'soft' => n2_('Soft') .
' 0.6x',
'normal' => n2_('Normal') .
' 1x',
'strong' => n2_('Strong') .
' 1.5x',
'superStrong' => n2_('Super strong')
. ' 2x'
)
));
new OnOff(new
InsertAfter($form->getElement('/autoplay/autoplay/row-finish/autoplayfinish')),
'loop-single-slide', n2_('Loop single slide'), 0,
array(
'tipLabel' => n2_('Loop single
slide'),
'tipDescription' => n2_('In case of one
slide, it repeats the animation of the slide.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1780-simple-slider-type#loop-single-slide'
));
$margin = new MarginPadding(new
InsertAfter($form->getElement('/general/design/design-1/margin')),
'padding', n2_('Padding'), '0|*|0|*|0|*|0',
array(
'unit' => 'px'
));
for ($i = 1; $i < 5; $i++) {
new Number($margin, 'padding-' . $i, false,
'', array(
'wide' => 3
));
}
$rowGroup = new ContainerRowGroup(new
InsertAfter($form->getElement('/general/design/design-1')),
'slider-type-simple-group-general', false);
$rowStyle = new FieldsetRow($rowGroup,
'slider-type-simple-settings-style');
new Number($rowStyle, 'border-width', n2_('Border
width'), 0, array(
'unit' => 'px',
'wide' => 3,
'relatedFields' =>
array('sliderborder-color')
));
new Color($rowStyle, 'border-color', n2_('Border
color'), '3E3E3Eff', array(
'alpha' => true
));
new Number($rowStyle, 'border-radius', n2_('Border
radius'), 0, array(
'unit' => 'px',
'wide' => 3
));
$rowSliderCSS = new FieldsetRow($rowGroup,
'slider-type-simple-settings-slidercss');
new Skin($rowSliderCSS, 'slider-preset', n2_('Slider
CSS Preset'), '', array(
'post' => 'break',
'options' => array(
'shadow' => array(
'label' => n2_('Light
shadow'),
'settings' => array(
'slider-css' => 'box-shadow: 1px
0 5px RGBA(0, 0, 0, 0.2), -1px 0 5px RGBA(0, 0, 0, 0.2);'
)
),
'shadow2' => array(
'label' => n2_('Dark
shadow'),
'settings' => array(
'slider-css' => 'box-shadow: 0
2px 4px 1px rgba(0, 0, 0, 0.6);'
)
),
'photo' => array(
'label' => n2_('Photo'),
'settings' => array(
'slider-css' => 'box-shadow:
1px 0 5px RGBA(0, 0, 0, 0.2), -1px 0 5px RGBA(0, 0, 0, 0.2);',
'border-width' => '8',
'border-color' => 'FFFFFFFF'
)
),
'roundedphoto' => array(
'label' => n2_('Photo
rounded'),
'settings' => array(
'slider-css' => 'box-shadow:
1px 0 5px RGBA(0, 0, 0, 0.2), -1px 0 5px RGBA(0, 0, 0, 0.2);',
'border-width' => '5',
'border-color' =>
'FFFFFFFF',
'border-radius' => '12'
)
)
)
));
new Textarea($rowSliderCSS, 'slider-css',
n2_('Slider') . ' CSS', '', array(
'height' => 26,
'resize' => 'both'
));
$rowSlideCSS = new FieldsetRow(new
InsertAfter($form->getElement('/slides/slides-design/slides-design-1')),
'slider-type-simple-settings-slidecss');
new Textarea($rowSlideCSS, 'slide-css',
n2_('Slide') . ' CSS', '', array(
'height' => 26,
'resize' => 'both'
));
}
public function renderSlideFields($container) {
$dataToFields = array();
$tableAnimation = new FieldsetLayerWindow($container,
'fields-slide-animation', n2_('Animation'));
// Background animations are required for simple type. We need to
load the lightbox, because it is not working over AJAX slider type change.
BackgroundAnimationManager::enqueue($container->getForm());
$rowBackgroundAnimation = new Grouping($tableAnimation,
'slide-settings-animation-background-animation');
new BackgroundAnimation($rowBackgroundAnimation,
'slide-background-animation', n2_('Background
animation'), '', array(
'relatedFields' => array(
'layerslide-background-animation-speed'
)
));
$dataToFields[] = [
'name' => 'background-animation',
'id' =>
'layerslide-background-animation',
'def' => ''
];
new Hidden($rowBackgroundAnimation,
'slide-background-animation-color', '');
$dataToFields[] = [
'name' => 'background-animation-color',
'id' =>
'layerslide-background-animation-color',
'def' => '333333ff'
];
new Select($rowBackgroundAnimation,
'slide-background-animation-speed', n2_('Speed'),
'', array(
'options' => array(
'default' => n2_('Default'),
'superSlow10' => n2_('Super slow') .
' 10x',
'superSlow' => n2_('Super slow') .
' 3x',
'slow' => n2_('Slow') .
' 1.5x',
'normal' => n2_('Normal') .
' 1x',
'fast' => n2_('Fast') .
' 0.75x',
'superFast' => n2_('Super fast') .
' 0.5x'
)
));
$dataToFields[] = [
'name' => 'background-animation-speed',
'id' =>
'layerslide-background-animation-speed',
'def' => 'default'
];
PostBackgroundAnimationManager::enqueue($container->getForm());
$rowKenBurns = new Grouping($tableAnimation,
'slide-settings-animation-ken-burns');
new PostBackgroundAnimation($rowKenBurns,
'slide-kenburns-animation', n2_('Ken Burns effect'),
'', array(
'relatedFields' => array(
'layerslide-kenburns-animation-speed',
'layerslide-kenburns-animation-strength'
)
));
$dataToFields[] = [
'name' => 'kenburns-animation',
'id' =>
'layerslide-kenburns-animation',
'def' => '50|*|50|*'
];
new Select($rowKenBurns,
'slide-kenburns-animation-speed', n2_('Speed'),
'', array(
'options' => array(
'default' => n2_('Default'),
'superSlow' => n2_('Super slow') .
' 0.25x',
'slow' => n2_('Slow') . '
0.5x',
'normal' => n2_('Normal') .
' 1x',
'fast' => n2_('Fast') . '
2x',
'superFast' => n2_('Super fast' .
' 4x')
)
));
$dataToFields[] = [
'name' => 'kenburns-animation-speed',
'id' =>
'layerslide-kenburns-animation-speed',
'def' => 'default'
];
new Select($rowKenBurns,
'slide-kenburns-animation-strength', n2_('Strength'),
'', array(
'options' => array(
'default' => n2_('Default'),
'superSoft' => n2_('Super soft') .
' 0.3x',
'soft' => n2_('Soft') .
' 0.6x',
'normal' => n2_('Normal') .
' 1x',
'strong' => n2_('Strong') .
' 1.5x',
'superStrong' => n2_('Super strong')
. ' 2x'
)
));
$dataToFields[] = [
'name' => 'kenburns-animation-strength',
'id' =>
'layerslide-kenburns-animation-strength',
'def' => 'default'
];
Js::addInline("_N2.r('SectionSlide', function(){
_N2.SectionSlide.addExternalDataToField(" . json_encode($dataToFields)
. ");});");
}
public function registerSlideAdminProperties($component) {
$component->createProperty('background-animation',
'');
$component->createProperty('background-animation-color',
'333333ff');
$component->createProperty('background-animation-speed',
'default');
$component->createProperty('kenburns-animation',
'50|*|50|*|');
$component->createProperty('kenburns-animation-speed',
'default');
$component->createProperty('kenburns-animation-strength',
'default');
}
}PK;e�[��
�
0Slider/SliderType/Simple/SliderTypeSimpleCss.phpnu�[���<?php
namespace Nextend\SmartSlider3\Slider\SliderType\Simple;
use Nextend\Framework\Parser\Color;
use Nextend\Framework\Parser\Common;
use Nextend\SmartSlider3\Slider\SliderType\AbstractSliderTypeCss;
class SliderTypeSimpleCss extends AbstractSliderTypeCss {
public function __construct($slider) {
parent::__construct($slider);
$params = $this->slider->params;
$width = intval($this->context['width']);
$height = intval($this->context['height']);
$this->base = array(
'slideOuterWidth' => $width,
'slideOuterHeight' => $height,
'sliderWidth' => $width,
'sliderHeight' => $height,
'slideWidth' => $width,
'slideHeight' => $height
);
$this->context['backgroundSize'] =
$params->getIfEmpty('background-size', 'inherit');
$this->context['backgroundAttachment'] =
$params->get('background-fixed') ? 'fixed' :
'scroll';
$borderWidth =
$params->getIfEmpty('border-width', 0);
$borderColor =
$params->get('border-color');
$this->context['borderRadius'] =
$params->get('border-radius') . 'px';
$padding =
Common::parse($params->get('padding'));
$this->context['paddingt'] = max(0, $padding[0]) .
'px';
$this->context['paddingr'] = max(0, $padding[1]) .
'px';
$this->context['paddingb'] = max(0, $padding[2]) .
'px';
$this->context['paddingl'] = max(0, $padding[3]) .
'px';
if ($this->context['canvas']) {
$width += 2 * $borderWidth + max(0, $padding[1]) + max(0,
$padding[3]);
$height += 2 * $borderWidth + max(0, $padding[0]) + max(0,
$padding[2]);
$this->context['width'] = $width .
"px";
$this->context['height'] = $height .
"px";
}
$this->context['border'] = $borderWidth .
'px';
$rgba = Color::hex2rgba($borderColor);
$this->context['borderrgba'] = 'RGBA(' .
$rgba[0] . ',' . $rgba[1] . ',' . $rgba[2] .
',' . round($rgba[3] / 127, 2) . ')';
$width = $width - (max(0, $padding[1]) +
max(0, $padding[3])) - $borderWidth * 2;
$height = $height - (max(0, $padding[0]) +
max(0, $padding[2])) - $borderWidth * 2;
$this->context['inner1height'] = $height .
'px';
$this->context['canvaswidth'] = $width .
"px";
$this->context['canvasheight'] = $height .
"px";
$this->initSizes();
$this->slider->addLess(SliderTypeSimple::getAssetsPath() .
'/style.n2less', $this->context);
}
}PK;e�[�}���5Slider/SliderType/Simple/SliderTypeSimpleFrontend.phpnu�[���<?php
namespace Nextend\SmartSlider3\Slider\SliderType\Simple;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\Model\Section;
use Nextend\Framework\Parser\Color;
use Nextend\Framework\Sanitize;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\BackgroundAnimation\BackgroundAnimationStorage;
use Nextend\SmartSlider3\Slider\SliderType\AbstractSliderTypeFrontend;
class SliderTypeSimpleFrontend extends AbstractSliderTypeFrontend {
private $backgroundAnimation = false;
public function getDefaults() {
return array(
'background' =>
'',
'background-size' =>
'cover',
'background-fixed' => 0,
'padding' =>
'0|*|0|*|0|*|0',
'border-width' => 0,
'border-color' =>
'3E3E3Eff',
'border-radius' => 0,
'slider-css' =>
'',
'slide-css' =>
'',
'animation' =>
'horizontal',
'animation-duration' => 800,
'animation-delay' => 0,
'animation-easing' =>
'easeOutQuad',
'animation-shifted-background-animation' =>
'auto',
'carousel' => 1,
'background-animation' => '',
'kenburns-animation' => ''
);
}
protected function renderType($css) {
$params = $this->slider->params;
$this->loadResources();
$sliderCSS = $params->get('slider-css');
$this->initSliderBackground('.n2-ss-slider-2');
$slideCSS = $params->get('slide-css');
$this->initBackgroundAnimation();
$this->initParticleJS();
echo $this->openSliderElement();
ob_start();
$slides = $this->slider->getSlides();
?>
<div class="n2-ss-slider-1 n2_ss__touch_element n2-ow"
style="<?php echo Sanitize::esc_attr($sliderCSS); ?>">
<div class="n2-ss-slider-2 n2-ow">
<?php
echo $this->getBackgroundVideo($params);
?>
<?php if ($this->backgroundAnimation): ?>
<div class="n2-ss-background-animation
n2-ow"></div>
<?php endif; ?>
<div class="n2-ss-slider-3 n2-ow"
style="<?php echo $slideCSS; ?>">
<?php
echo $this->slider->staticHtml;
echo Html::openTag('div',
array('class' => 'n2-ss-slide-backgrounds
n2-ow-all'));
foreach ($slides as $slide) {
echo $slide->background;
}
echo Html::closeTag('div');
?>
<div class="n2-ss-slider-4 n2-ow">
<?php
$this->displaySizeSVGs($css);
foreach ($slides as $slide) {
$slide->finalize();
echo Html::tag('div',
Html::mergeAttributes($slide->attributes, $slide->linkAttributes,
array(
'class' => 'n2-ss-slide
n2-ow ' . $slide->classes,
'style' => $slide->style
)), $slide->getHTML());
}
?>
</div>
<?php
$this->renderShapeDividers();
?>
</div>
</div>
</div>
<?php
echo $this->widgets->wrapSlider(ob_get_clean());
echo $this->closeSliderElement();
$this->javaScriptProperties['mainanimation'] = array(
'type' =>
$params->get('animation'),
'duration' =>
intval($params->get('animation-duration')),
'delay' =>
intval($params->get('animation-delay')),
'ease' =>
$params->get('animation-easing'),
'shiftedBackgroundAnimation' =>
$params->get('animation-shifted-background-animation')
);
$this->javaScriptProperties['carousel'] =
intval($params->get('carousel'));
$this->style .= $css->getCSS();
$this->jsDependency[] = 'ss-simple';
}
public function getScript() {
return "_N2.r(" .
json_encode(array_unique($this->jsDependency)) . ",function(){new
_N2.SmartSliderSimple('{$this->slider->elementId}', "
. $this->encodeJavaScriptProperties() . ");});";
}
public function loadResources() {
Js::addStaticGroup(SliderTypeSimple::getAssetsPath() .
'/dist/ss-simple.min.js', 'ss-simple');
}
private function initBackgroundAnimation() {
$speed =
$this->slider->params->get('background-animation-speed',
'normal');
$color =
Color::colorToRGBA($this->slider->params->get('background-animation-color',
'333333ff'));
$this->javaScriptProperties['bgAnimations'] = array(
'global' =>
$this->parseBackgroundAnimations($this->slider->params->get('background-animation',
'')),
'color' => $color,
'speed' => $speed
);
$slides = array();
$hasCustom = false;
foreach ($this->slider->getSlides() as $i => $slide) {
$animation =
$this->parseBackgroundAnimations($slide->parameters->get('background-animation'));
if ($animation) {
$slideSpeed =
$slide->parameters->get('background-animation-speed',
'default');
if ($slideSpeed == 'default') {
$slideSpeed = $speed;
}
$slides[$i] = array(
'animation' =>
$this->parseBackgroundAnimations($slide->parameters->get('background-animation')),
'speed' => $slideSpeed
);
$localColor =
$slide->parameters->get('background-animation-color',
'');
if (!empty($localColor)) {
$slides[$i]['color'] =
Color::colorToRGBA($localColor);
}
if ($slides[$i]) {
$hasCustom = true;
}
}
}
if ($hasCustom) {
$this->javaScriptProperties['bgAnimations']['slides']
= $slides;
} else if
(!$this->javaScriptProperties['bgAnimations']['global'])
{
$this->javaScriptProperties['bgAnimations'] = 0;
}
if ($this->javaScriptProperties['bgAnimations'] != 0)
{
$this->jsDependency[] =
"smartslider-backgroundanimation";
// We have background animation so load the required JS files
Js::addStaticGroup(SliderTypeSimple::getAssetsPath() .
'/dist/smartslider-backgroundanimation.min.js',
'smartslider-backgroundanimation');
$this->slider->addLess(SliderTypeSimple::getAssetsPath()
. '/BackgroundAnimation/style.n2less', array(
'sliderid' =>
"~'#{$this->slider->elementId}'",
"color" => $color
));
}
}
private function parseBackgroundAnimations($backgroundAnimation) {
$backgroundAnimations = array_unique(array_map('intval',
explode('||', $backgroundAnimation)));
$jsProps = array();
if (count($backgroundAnimations)) {
BackgroundAnimationStorage::getInstance();
foreach ($backgroundAnimations as $animationId) {
$animation = Section::getById($animationId,
'backgroundanimation');
if (isset($animation)) {
$jsProps[] =
$animation['value']['data'];
}
}
if (count($jsProps)) {
$this->backgroundAnimation = true;
return $jsProps;
}
}
return 0;
}
}PK;e�[.��� 'Slider/SliderType/SliderTypeFactory.phpnu�[���<?php
namespace Nextend\SmartSlider3\Slider\SliderType;
use Nextend\Framework\Pattern\OrderableTrait;
use Nextend\Framework\Pattern\PluggableTrait;
use Nextend\Framework\Pattern\SingletonTrait;
use Nextend\SmartSlider3\Slider\Slider;
class SliderTypeFactory {
use SingletonTrait, PluggableTrait;
/**
* @var AbstractSliderType[]
*/
private static $types = array();
/**
* @param AbstractSliderType $sliderType
*/
public static function addType($sliderType) {
self::$types[$sliderType->getName()] = $sliderType;
}
/**
* @param $name
*
* @return AbstractSliderType|null
*/
public static function getType($name) {
if (isset(self::$types[$name])) {
return self::$types[$name];
}
if ($name == 'simple') {
/**
* There is no fallback if simple type missing
*/
return null;
}
return self::getType('simple');
}
/**
* @return AbstractSliderType[]
*/
public static function getTypes() {
return self::$types;
}
/**
* @return AbstractSliderTypeAdmin[]
*/
public static function getAdminTypes() {
$adminTypes = array();
foreach (self::$types AS $name => $type) {
$admin = $type->createAdmin();
if ($admin) {
$adminTypes[$name] = $admin;
}
}
OrderableTrait::uasort($adminTypes);
return $adminTypes;
}
protected function init() {
$this->makePluggable('SliderType');
}
/**
* @param $name
* @param Slider $slider
*
* @return AbstractSliderTypeFrontend|null
*/
public static function createFrontend($name, $slider) {
$type = self::getType($name);
if ($type) {
return $type->createFrontend($slider);
}
return null;
}
/**
* @param $name
* @param Slider $slider
*
* @return AbstractSliderTypeCss|null
*/
public static function createCss($name, $slider) {
$type = self::getType($name);
if ($type) {
return $type->createCss($slider);
}
return null;
}
}
SliderTypeFactory::getInstance();PK;e�[%e�ttSlider/SliderType/SVGFlip.phpnu�[���<?php
namespace Nextend\SmartSlider3\Slider\SliderType;
class SVGFlip {
private static $viewBoxX;
private static $viewBoxY;
/**
* @param string $svg
* @param bool $x
* @param bool $y
*
* @return string
*/
public static function mirror($svg, $x, $y) {
/* @var callable $callable */
if ($x && $y) {
$callable = array(
self::class,
'xy'
);
} else if ($x) {
$callable = array(
self::class,
'x'
);
} else if ($y) {
$callable = array(
self::class,
'y'
);
} else {
return $svg;
}
preg_match('/(viewBox)=[\'"](.*?)[\'"]/i',
$svg, $viewBoxResult);
$viewBox = explode(' ', end($viewBoxResult));
self::$viewBoxX = $viewBox[2];
self::$viewBoxY = $viewBox[3];
$pattern = '/d=[\'"](.*?)[\'"]/i';
return preg_replace_callback($pattern, $callable, $svg);
}
private static function x($matches) {
$path = $matches[1];
$path = substr($path, 0, -1);
$values = explode(' ', $path);
$newPath = '';
for ($i = 0; $i < count($values); $i++) {
$pathCommand = substr($values[$i], 0, 1);
$pathPart = substr($values[$i], 1);
$points = explode(',', $pathPart);
for ($j = 0; $j < count($points); $j = $j + 2) {
switch ($pathCommand) {
case 'l':
case 'm':
case 'h':
case 'c':
case 's':
case 'q':
case 't':
$points[$j] = -$points[$j];
break;
case 'L':
case 'M':
case 'H':
case 'C':
case 'S':
case 'Q':
case 'T':
$points[$j] = self::$viewBoxX - $points[$j];
break;
}
}
$newPath .= $pathCommand . implode(',', $points);
}
return 'd="' . $newPath . 'z"';
}
private static function y($matches) {
$path = $matches[1];
$path = substr($path, 0, -1);
$values = explode(' ', $path);
$newPath = '';
for ($i = 0; $i < count($values); $i++) {
$pathCommand = substr($values[$i], 0, 1);
$pathPart = substr($values[$i], 1);
$points = explode(',', $pathPart);
for ($j = 0; $j < count($points); $j = $j + 2) {
switch ($pathCommand) {
case 'v':
$points[$j] = -$points[$j];
break;
case 'V':
$points[$j] = self::$viewBoxY - $points[$j];
break;
case 'l':
case 'm':
case 'c':
case 's':
case 'q':
case 't':
$points[$j + 1] = -$points[$j + 1];
break;
case 'L':
case 'M':
case 'C':
case 'S':
case 'Q':
case 'T':
$points[$j + 1] = self::$viewBoxY - $points[$j +
1];
break;
}
}
$newPath .= $pathCommand . implode(',', $points);
}
return 'd="' . $newPath . 'z"';
}
private static function xy($matches) {
$path = $matches[1];
$path = substr($path, 0, -1);
$values = explode(' ', $path);
$newPath = '';
for ($i = 0; $i < count($values); $i++) {
$pathCommand = substr($values[$i], 0, 1);
$pathPart = substr($values[$i], 1);
$points = explode(',', $pathPart);
for ($j = 0; $j < count($points); $j = $j + 2) {
switch ($pathCommand) {
case 'h':
case 'v':
$points[$j] = -$points[$j];
break;
case 'H':
$points[$j] = self::$viewBoxX - $points[$j];
break;
case 'V':
$points[$j] = self::$viewBoxY - $points[$j];
break;
case 'l':
case 'm':
case 'c':
case 's':
case 'q':
case 't':
$points[$j] = -$points[$j];
$points[$j + 1] = -$points[$j + 1];
break;
case 'L':
case 'M':
case 'C':
case 'S':
case 'Q':
case 'T':
$points[$j] = self::$viewBoxX - $points[$j];
$points[$j + 1] = self::$viewBoxY - $points[$j +
1];
break;
}
}
$newPath .= $pathCommand . implode(',', $points);
}
return 'd="' . $newPath . 'z"';
}
}PK;e�[���
Slider/Slides.phpnu�[���<?php
namespace Nextend\SmartSlider3\Slider;
use Nextend\SmartSlider3\Application\Model\ModelSlides;
class Slides {
/**
* @var Slider
*/
protected $slider;
/**
* @var Slide[]
*/
protected $slides = array();
/**
* @var Slide[]
*/
protected $allEnabledSlides = array();
protected $maximumSlideCount = 10000;
/**
* Slides constructor.
*
* @param Slider $slider
*/
public function __construct($slider) {
$this->slider = $slider;
$this->maximumSlideCount =
intval($slider->params->get('maximumslidecount', 10000));
}
public function initSlides($slidesData = array(), $generatorData =
array()) {
$this->loadSlides($slidesData);
$this->makeSlides($slidesData, $generatorData);
return $this->slides;
}
/**
* @param Slide[] $slides
*/
protected function legacyFixOnlyStaticOverlays(&$slides) {
if (count($slides)) {
$hasNonStaticSlide = false;
foreach ($slides as $slide) {
if (!$slide->isStatic()) {
$hasNonStaticSlide = true;
}
}
if (!$hasNonStaticSlide) {
foreach ($slides as $slide) {
$slide->forceNonStatic();
}
}
}
}
protected function makeSlides($slidesData, $extendGenerator = array())
{
$slides = &$this->slides;
for ($i = 0; $i < count($slides); $i++) {
$slides[$i]->initGenerator($extendGenerator);
}
for ($i = count($slides) - 1; $i >= 0; $i--) {
if ($slides[$i]->hasGenerator()) {
array_splice($slides, $i, 1,
$slides[$i]->expandSlide());
}
}
$this->legacyFixOnlyStaticOverlays($slides);
$staticSlides = array();
for ($j = count($slides) - 1; $j >= 0; $j--) {
$slide = $slides[$j];
if ($slide->isStatic()) {
$staticSlides[] = $slide;
$this->slider->addStaticSlide($slide);
array_splice($slides, $j, 1);
}
}
$randomize =
intval($this->slider->params->get('randomize', 0));
$randomizeFirst =
intval($this->slider->params->get('randomizeFirst', 0));
$randomizeCache =
intval($this->slider->params->get('randomize-cache',
0));
if (!$randomizeCache && $randomize) {
shuffle($slides);
}
if ($this->maximumSlideCount > 0) {
$mustShowSlides = array();
if (!empty($slidesData)) {
for ($i = count($slides) - 1; $i >= 0; $i--) {
if (isset($slidesData[$slides[$i]->id])) {
$mustShowSlides[] = $slides[$i];
}
}
}
array_splice($slides, $this->maximumSlideCount);
if (!empty($mustShowSlides)) {
for ($i = count($mustShowSlides) - 1; $i >= 0; $i--) {
if (!in_array($mustShowSlides[$i], $slides)) {
array_pop($slides);
} else {
array_splice($mustShowSlides, $i, 1);
}
}
$slides = array_merge($slides, $mustShowSlides);
}
}
$reverse =
intval($this->slider->params->get('reverse-slides', 0));
if ($reverse) {
$slides = array_reverse($slides);
}
if (!$randomizeCache && $randomizeFirst) {
$this->slider->setActiveSlide($slides[mt_rand(0,
count($slides) - 1)]);
} else {
for ($i = 0; $i < count($slides); $i++) {
if ($slides[$i]->isFirst()) {
$this->slider->setActiveSlide($slides[$i]);
break;
}
}
}
if (count($slides) == 1 &&
$this->slider->params->get('loop-single-slide', 0)) {
$slides[1] = clone $slides[0];
}
for ($i = 0; $i < count($slides); $i++) {
$slides[$i]->setPublicID($i + 1);
}
}
public function addDummySlides() {
/**
* When the currently edited slide is static and there is not other
slide, we create a temporary empty slide
*/
$slidesModel = new ModelSlides($this->slider);
$images = array(
'$ss3-frontend$/images/placeholder/image.png',
'$ss3-frontend$/images/placeholder/video.png',
'$ss3-frontend$/images/placeholder/image.png',
'$ss3-frontend$/images/placeholder/video.png'
);
for ($i = 0; $i < count($images); $i++) {
$this->slides[] =
$this->createSlide($slidesModel->convertSlideDataToDatabaseRow(array(
'id' => $i,
'title' => 'Slide #'
. $i,
'layers' => '[]',
'description' => '',
'thumbnail' => $images[$i],
'published' => 1,
'publish_up' => '0000-00-00
00:00:00',
'publish_down' => '0000-00-00
00:00:00',
'backgroundImage' => $images[$i],
'slide-background-type' => 'image'
)));
}
$this->makeSlides(array());
}
protected function loadSlides($extend) {
$where = $this->slidesWhereQuery();
$slidesModel = new ModelSlides($this->slider);
$slideRows =
$slidesModel->getAll($this->slider->sliderId, $where);
for ($i = 0; $i < count($slideRows); $i++) {
if (isset($extend[$slideRows[$i]['id']])) {
$slideRows[$i] = array_merge($slideRows[$i],
$extend[$slideRows[$i]['id']]);
}
$slide = $this->createSlide($slideRows[$i]);
if ($slide->isVisible()) {
$this->slides[] = $slide;
}
$this->allEnabledSlides[$i] = $slide;
}
}
protected function createSlide($slideRow) {
return new Slide($this->slider, $slideRow);
}
protected function slidesWhereQuery() {
return " AND published = 1 ";
}
public function getNextCacheRefresh() {
$earlier = 2145916800;
for ($i = 0; $i < count($this->allEnabledSlides); $i++) {
$earlier =
min($this->allEnabledSlides[$i]->nextCacheRefresh, $earlier);
}
return $earlier;
}
/**
* @return Slide[]
*/
public function getSlides() {
return $this->slides;
}
/**
* @return int
*/
public function getSlidesCount() {
return count($this->slides);
}
/**
* @return bool
*/
public function hasSlides() {
return !empty($this->slides);
}
public function prepareRender() {
for ($i = 0; $i < count($this->slides); $i++) {
$this->slides[$i]->setIndex($i);
$this->slides[$i]->prepare();
$this->slides[$i]->setSlidesParams();
}
}
}PK;e�[Di���SliderManager/SliderManager.phpnu�[���<?php
namespace Nextend\SmartSlider3\SliderManager;
use Exception;
use Nextend\Framework\Asset\AssetManager;
use Nextend\Framework\Pattern\MVCHelperTrait;
use Nextend\Framework\Translation\Translation;
use Nextend\SmartSlider3\Application\Model\ModelSliders;
use Nextend\SmartSlider3\Application\Model\ModelSlidersXRef;
use Nextend\SmartSlider3\Slider\Cache\CacheSlider;
use Nextend\SmartSlider3\Slider\Slider;
class SliderManager {
use MVCHelperTrait;
protected $isAdmin;
protected $hasError = false;
protected $displayWhenEmpty = false;
protected $usage = 'Unknown';
/**
* @var Slider
*/
public $slider;
public $nextCacheRefresh;
/**
* @var ModelSlidersXRef
*/
private $xref;
/**
*
* @param MVCHelperTrait $MVCHelper
* @param $sliderIDorAlias
* @param $isAdmin
* @param array $parameters
*/
public function __construct($MVCHelper, $sliderIDorAlias, $isAdmin =
false, $parameters = array()) {
$this->setMVCHelper($MVCHelper);
$this->isAdmin = $isAdmin;
$sliderID = false;
$model = new ModelSliders($this);
if (!is_numeric($sliderIDorAlias)) {
$slider = $model->getByAlias($sliderIDorAlias);
if ($slider) {
$sliderID = intval($slider['id']);
}
} else {
$sliderID = intval($sliderIDorAlias);
}
if ($sliderID) {
$this->init($sliderID, $parameters);
$this->xref = new ModelSlidersXRef($model);
AssetManager::addCachedGroup($this->slider->cacheId);
} else {
$this->hasError = true;
}
}
protected function init($sliderID, $parameters) {
$this->slider = new Slider($this->MVCHelper, $sliderID,
$parameters, $this->isAdmin);
}
public function setUsage($usage) {
$this->usage = $usage;
}
/**
* @return Slider
*/
public function getSlider() {
return $this->slider;
}
public function render($cache = false) {
if ($this->hasError) {
return '';
}
try {
if (!$cache) {
$this->slider->initAll();
if
(($this->xref->isSliderAvailableInAnyGroups($this->slider->sliderId)
|| $this->isAdmin) && ($this->slider->hasSlides() ||
$this->displayWhenEmpty)) {
return $this->slider->render();
}
return '';
}
return
$this->slider->addCMSFunctions($this->cacheSlider());
} catch (Exception $e) {
return '';
}
}
private function cacheSlider() {
$cache = new CacheSlider($this->slider->cacheId, array(
'slider' => $this->slider
));
$cachedSlider = $cache->makeCache('slider' .
Translation::getCurrentLocale(), '', array(
$this,
'renderCachedSlider'
));
$this->nextCacheRefresh =
$cache->getData('nextCacheRefresh', false);
if ($cachedSlider === false) {
return '<!--Smart Slider #' .
$this->slider->sliderId . ' does NOT EXIST or has NO
SLIDES!' . $this->usage . '-->';
}
AssetManager::loadFromArray($cachedSlider['assets']);
return $cachedSlider['html'];
}
/**
* @return array|bool
* @throws Exception
*/
public function renderCachedSlider() {
AssetManager::createStack();
$content = array();
try {
$this->slider->initAll();
if
(($this->xref->isSliderAvailableInAnyGroups($this->slider->sliderId)
|| $this->isAdmin) && $this->slider->hasSlides()) {
$content['html'] = $this->slider->render();
} else {
$content['html'] = '';
}
} catch (\Exception $exception) {
$content['html'] = false;
}
$assets = AssetManager::removeStack();
if ($content['html'] === false) {
return false;
}
$content['assets'] = $assets;
return $content;
}
public function allowDisplayWhenEmpty() {
$this->displayWhenEmpty = true;
}
}PK;e�[��7dOOSmartSlider3.phpnu�[���<?php
namespace Nextend\SmartSlider3;
use Nextend\Framework\Localization\Localization;
use Nextend\Framework\Pattern\GetAssetsPathTrait;
use Nextend\Framework\Pattern\SingletonTrait;
use Nextend\Framework\Platform\Platform;
use Nextend\Framework\Plugin;
use Nextend\Nextend;
use Nextend\SmartSlider3\Generator\Common\GeneratorCommonLoader;
use Nextend\SmartSlider3\Generator\Joomla\GeneratorJoomlaLoader;
use Nextend\SmartSlider3\Generator\WordPress\GeneratorWordPressLoader;
use Nextend\SmartSlider3\Platform\SmartSlider3Platform;
use Nextend\SmartSlider3\Slider\ResponsiveType\Auto\ResponsiveTypeAuto;
use
Nextend\SmartSlider3\Slider\ResponsiveType\FullWidth\ResponsiveTypeFullWidth;
use Nextend\SmartSlider3\Slider\ResponsiveType\ResponsiveTypeFactory;
use Nextend\SmartSlider3\Slider\SliderType\Block\SliderTypeBlock;
use Nextend\SmartSlider3\Slider\SliderType\Simple\SliderTypeSimple;
use Nextend\SmartSlider3\Slider\SliderType\SliderTypeFactory;
class SmartSlider3 {
use SingletonTrait, GetAssetsPathTrait;
protected function init() {
Platform::getInstance();
SmartSlider3Platform::getInstance();
Localization::loadPluginTextDomain(Nextend::getPath() .
'/Languages');
Storage::getInstance();
Plugin::addAction('PluggableFactorySliderType', array(
$this,
'sliderTypes'
));
Plugin::addAction('PluggableFactorySliderResponsiveType',
array(
$this,
'sliderResponsiveTypes'
));
Plugin::addAction('PluggableFactorySliderGenerator',
array(
$this,
'sliderGenerator'
));
}
public function sliderTypes() {
SliderTypeFactory::addType(new SliderTypeSimple());
SliderTypeFactory::addType(new SliderTypeBlock());
}
public function sliderResponsiveTypes() {
ResponsiveTypeFactory::addType(new ResponsiveTypeAuto());
ResponsiveTypeFactory::addType(new ResponsiveTypeFullWidth());
}
public function sliderGenerator() {
new GeneratorCommonLoader();
new GeneratorJoomlaLoader();
}
}PK;e�[�v���SmartSlider3Info.phpnu�[���<?php
namespace Nextend\SmartSlider3;
use Nextend\Framework\Api;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\Notification\Notification;
use Nextend\Framework\Platform\Platform;
use Nextend\Framework\Url\Url;
use Nextend\Framework\Url\UrlHelper;
use Nextend\SmartSlider3\Application\ApplicationSmartSlider3;
use Nextend\SmartSlider3\Application\Model\ModelLicense;
class SmartSlider3Info {
public static $version = '3.5.0.8';
public static $channel = 'stable';
public static $revision =
'231a44b8066a9ea19f26302f11d5978a4ad37965';
public static $revisionShort = '231a44b8';
public static $branch = 'release-3.5.0.8';
public static $completeVersion;
public static $completeVersionReadable;
public static $plan = 'pro';
public static $product = 'smartslider3';
public static $campaign = 'smartslider3';
public static $source = '';
public static $forceDesktop = false;
public static function init() {
self::$completeVersion = self::$version . '/b:' .
self::$branch . '/r:' . self::$revision;
self::$completeVersionReadable = self::$version . 'r' .
self::$revisionShort;
}
public static function shouldSkipLicenseModal() {
static $shouldSkipLicenseModal;
if ($shouldSkipLicenseModal === null) {
$shouldSkipLicenseModal = false;
}
return $shouldSkipLicenseModal;
}
public static function applySource(&$params) {
if (!empty(self::$source)) {
$params['source'] = self::$source;
}
}
public static function getProUrlHome($params = array()) {
self::applySource($params);
return 'https://smartslider3.com/?' .
http_build_query($params);
}
public static function getProUrlPricing($params = array()) {
self::applySource($params);
return 'https://smartslider3.com/pricing/?' .
http_build_query($params);
}
public static function decorateExternalUrl($url, $params = array()) {
self::applySource($params);
$params['utm_campaign'] = self::$campaign;
$params['utm_medium'] = 'smartslider-' .
Platform::getName() . '-' . self::$plan;
return UrlHelper::add_query_arg($params, $url);
}
public static function getWhyProUrl($params = array()) {
self::applySource($params);
$params['utm_campaign'] = self::$campaign;
$params['utm_medium'] = 'smartslider-' .
Platform::getName() . '-' . self::$plan;
return 'https://smartslider3.com/features/?' .
http_build_query($params);
}
public static function getSampleSlidesUrl($params = array()) {
self::applySource($params);
return 'https://smartslider3.com/slides/' .
self::$version . '/pro2e4G2dR/?' . http_build_query($params);
}
public static function getActivationUrl($params = array()) {
self::applySource($params);
return 'https://secure.nextendweb.com/activate/?' .
http_build_query($params);
}
public static function getUpdateInfo() {
return array(
'name' => 'smartslider3',
'plugin' =>
'nextend-smart-slider3-pro/nextend-smart-slider3-pro.php'
);
}
public static function getDomain() {
$domain = parse_url(Url::getSiteUri(), PHP_URL_HOST);
if (empty($domain)) {
if (isset($_SERVER['HTTP_HOST'])) {
$domain = $_SERVER['HTTP_HOST'];
}
if (empty($domain) &&
isset($_SERVER['SERVER_NAME'])) {
$domain = $_SERVER['SERVER_NAME'];
}
}
return $domain;
}
public static function api($_posts, $returnUrl = false) {
$isPro = 1;
$posts = array(
'product' => self::$product,
'pro' => $isPro
);
$posts['version'] = self::$version;
$posts['domain'] = self::getDomain();
$posts['license'] = ModelLicense::getInstance()
->getKey();
return Api::api($_posts + $posts, $returnUrl);
}
public static function hasApiError($status, $data = array()) {
extract($data);
switch ($status) {
case 'OK':
return false;
case 'PRODUCT_ASSET_NOT_AVAILABLE':
Notification::error(sprintf(n2_('Demo slider is not
available with the following ID: %s'), $key));
break;
case 'ASSET_PREMIUM':
Notification::error('Premium sliders are available in
Pro version only!');
break;
case 'ASSET_VERSION':
Notification::error('Please <a
href="https://smartslider.helpscoutdocs.com/article/1752-update"
target="_blank">update</a> your Smart Slider to the
latest version to be able to import the selected sample slider!');
break;
case 'LICENSE_EXPIRED':
Notification::error('Your license has <a
href="https://smartslider.helpscoutdocs.com/article/1718-activation#nopackage"
target="_blank">expired</a>! Get new one: <a
href="https://smartslider3.com/pricing"
target="_blank">smartslider3.com</a>.');
break;
case 'DOMAIN_REGISTER_FAILED':
Notification::error('Smart Slider 3 Pro license is not
registered on the current domain. Please activate this domain by following
<a
href="https://smartslider.helpscoutdocs.com/article/1718-activation"
target="_blank">the license activation
documentation</a>.');
break;
case 'LICENSE_INVALID':
Notification::error('Smart Slider 3 Pro license is not
registered on the current domain. Please activate this domain by following
<a
href="https://smartslider.helpscoutdocs.com/article/1718-activation"
target="_blank">the license activation
documentation</a>.');
ModelLicense::getInstance()
->setKey('');
return 'dashboard';
break;
case 'UPDATE_ERROR':
Notification::error('Update error, please update
manually!');
break;
case 'PLATFORM_NOT_ALLOWED':
Notification::error(sprintf('Your license is not valid
for Smart Slider3 - %s!', Platform::getLabel()));
break;
case 'ERROR_HANDLED':
break;
case '503':
Notification::error('Licensing server is down. Please
try again later.');
break;
case null:
Notification::error('Licensing server not reachable.
Please allow outgoing connection to the following ip addresses:
139.162.190.63, 172.104.28.39');
break;
default:
Notification::error('Debug: ' . $status);
Notification::error('Licensing server not reachable.
Please allow outgoing connection to the following ip addresses:
139.162.190.63, 172.104.28.39');
break;
}
return true;
}
public static function initLicense() {
$model = ModelLicense::getInstance();
Js::addInline("new _N2.License(" . json_encode(array(
'activated' => $model->hasKey(),
'maybeActive' => $model->maybeActive(),
'activationUrl' =>
self::getActivationUrl(array(
'utm_source' => 'activate',
'utm_medium' => 'smartslider-'
. Platform::getName() . '-' . self::$plan,
'utm_campaign' => self::$campaign
)),
'activationArgs' => array(
'product' => self::$product,
'domain' => self::getDomain(),
'platform' => Platform::getName()
),
'ajaxUrl' =>
ApplicationSmartSlider3::getInstance()
->getApplicationTypeAdmin()
->getAjaxUrlLicenseAdd()
)) . ");");
}
public static function sliderChanged() {
}
}
SmartSlider3Info::init();PK;e�[�2�mooStorage.phpnu�[���<?php
namespace Nextend\SmartSlider3;
use Nextend\Framework\Pattern\SingletonTrait;
use Nextend\Framework\Plugin;
class Storage {
use SingletonTrait;
protected function init() {
Plugin::addAction('fontStorage', array(
$this,
'fontStorage'
));
Plugin::addAction('styleStorage', array(
$this,
'styleStorage'
));
Plugin::addAction('splitTextAnimationStorage', array(
$this,
'splitTextAnimationStorage'
));
Plugin::addAction('backgroundAnimationStorage', array(
$this,
'backgroundAnimationStorage'
));
Plugin::addAction('postBackgroundAnimationStorage',
array(
$this,
'postBackgroundAnimationStorage'
));
Plugin::addAction('layoutStorage', array(
$this,
'layoutStorage'
));
Plugin::addAction('ss3itemheadingStorage', array(
$this,
'itemheadingStorage'
));
Plugin::addAction('ss3itemtextStorage', array(
$this,
'itemtextStorage'
));
Plugin::addAction('ss3itembuttonStorage', array(
$this,
'itembuttonStorage'
));
Plugin::addAction('ss3itemiconStorage', array(
$this,
'itemiconStorage'
));
}
public function styleStorage(&$sets, &$styles) {
array_push($sets, array(
'id' => 1000,
'referencekey' => '',
'value' => n2_('Heading')
));
array_push($styles, array(
'id' => 1001,
'referencekey' => 1000,
'value' => array(
'name' => n2_('Blue'),
'data' => array(
array(
'backgroundcolor' =>
'01add3ff',
'padding' =>
'5|*|20|*|5|*|20|*|px',
),
),
)
));
array_push($styles, array(
'id' => 1002,
'referencekey' => 1000,
'value' => array(
'name' => n2_('White'),
'data' => array(
array(
'backgroundcolor' =>
'ffffffcc',
'padding' =>
'5|*|20|*|5|*|20|*|px',
),
),
)
));
array_push($styles, array(
'id' => 1003,
'referencekey' => 1000,
'value' => array(
'name' => n2_('Green'),
'data' => array(
array(
'backgroundcolor' =>
'5cba3cff',
'padding' =>
'5|*|20|*|5|*|20|*|px',
),
),
)
));
array_push($styles, array(
'id' => 1004,
'referencekey' => 1000,
'value' => array(
'name' => n2_('Purple'),
'data' => array(
array(
'backgroundcolor' =>
'8757b2ff',
'padding' =>
'5|*|20|*|5|*|20|*|px',
),
),
)
));
array_push($styles, array(
'id' => 1005,
'referencekey' => 1000,
'value' => array(
'name' => n2_('Grey'),
'data' => array(
array(
'backgroundcolor' =>
'81898dff',
'padding' =>
'5|*|20|*|5|*|20|*|px',
),
),
)
));
array_push($styles, array(
'id' => 1006,
'referencekey' => 1000,
'value' => array(
'name' => n2_('Black'),
'data' => array(
array(
'backgroundcolor' =>
'000000cc',
'padding' =>
'5|*|20|*|5|*|20|*|px',
),
),
)
));
array_push($styles, array(
'id' => 1007,
'referencekey' => 1000,
'value' => array(
'name' => n2_('Rounded Blue'),
'data' => array(
array(
'backgroundcolor' =>
'01add3ff',
'padding' =>
'5|*|20|*|5|*|20|*|px',
'borderradius' => '3',
),
),
)
));
array_push($styles, array(
'id' => 1008,
'referencekey' => 1000,
'value' => array(
'name' => n2_('Rounded Green'),
'data' => array(
array(
'backgroundcolor' =>
'5cba3cff',
'padding' =>
'5|*|20|*|5|*|20|*|px',
'borderradius' => '3',
),
),
)
));
array_push($styles, array(
'id' => 1009,
'referencekey' => 1000,
'value' => array(
'name' => n2_('Rounded Purple'),
'data' => array(
array(
'backgroundcolor' =>
'8757b2ff',
'padding' =>
'5|*|20|*|5|*|20|*|px',
'borderradius' => '3',
),
),
)
));
array_push($styles, array(
'id' => 1010,
'referencekey' => 1000,
'value' => array(
'name' => n2_('Rounded Grey'),
'data' => array(
array(
'backgroundcolor' =>
'81898dff',
'padding' =>
'5|*|20|*|5|*|20|*|px',
'borderradius' => '3',
),
),
)
));
array_push($styles, array(
'id' => 1011,
'referencekey' => 1000,
'value' => array(
'name' => n2_('Rounded White'),
'data' => array(
array(
'backgroundcolor' =>
'ffffffcc',
'padding' =>
'5|*|20|*|5|*|20|*|px',
'borderradius' => '3',
),
),
)
));
array_push($styles, array(
'id' => 1012,
'referencekey' => 1000,
'value' => array(
'name' => n2_('Rounded Black'),
'data' => array(
array(
'backgroundcolor' =>
'000000cc',
'padding' =>
'5|*|20|*|5|*|20|*|px',
'borderradius' => '3',
),
),
)
));
array_push($styles, array(
'id' => 1013,
'referencekey' => 1000,
'value' => array(
'name' => n2_('Border White'),
'data' => array(
array(
'backgroundcolor' =>
'00000000',
'padding' =>
'5|*|20|*|5|*|20|*|px',
'border' =>
'2|*|solid|*|ffffffff',
),
),
)
));
array_push($styles, array(
'id' => 1014,
'referencekey' => 1000,
'value' => array(
'name' => n2_('Border Dark'),
'data' => array(
array(
'backgroundcolor' =>
'00000000',
'padding' =>
'5|*|20|*|5|*|20|*|px',
'border' =>
'2|*|solid|*|000000cc',
),
),
)
));
array_push($sets, array(
'id' => 1100,
'referencekey' => '',
'value' => n2_('Button')
));
array_push($styles, array(
'id' => 1101,
'referencekey' => 1100,
'value' => array(
'name' => n2_('Rectangle Green'),
'data' => array(
array(
'backgroundcolor' =>
'5cba3cff',
'padding' =>
'10|*|30|*|10|*|30|*|px',
),
),
)
));
array_push($styles, array(
'id' => 1102,
'referencekey' => 1100,
'value' => array(
'name' => n2_('Rectangle Blue'),
'data' => array(
array(
'backgroundcolor' =>
'01add3ff',
'padding' =>
'10|*|30|*|10|*|30|*|px',
),
),
)
));
array_push($styles, array(
'id' => 1103,
'referencekey' => 1100,
'value' => array(
'name' => n2_('Rectangle Purple'),
'data' => array(
array(
'backgroundcolor' =>
'8757b2ff',
'padding' =>
'10|*|30|*|10|*|30|*|px',
),
),
)
));
array_push($styles, array(
'id' => 1104,
'referencekey' => 1100,
'value' => array(
'name' => n2_('Rectangle Grey'),
'data' => array(
array(
'backgroundcolor' =>
'81898dff',
'padding' =>
'10|*|30|*|10|*|30|*|px',
),
),
)
));
array_push($styles, array(
'id' => 1105,
'referencekey' => 1100,
'value' => array(
'name' => n2_('Rounded Rectangle
Green'),
'data' => array(
array(
'backgroundcolor' =>
'5cba3cff',
'padding' =>
'10|*|30|*|10|*|30|*|px',
'borderradius' => '3',
),
array(
'backgroundcolor' =>
'58ad3bff',
),
),
)
));
array_push($styles, array(
'id' => 1106,
'referencekey' => 1100,
'value' => array(
'name' => n2_('Rounded Rectangle
Blue'),
'data' => array(
array(
'backgroundcolor' =>
'01add3ff',
'padding' =>
'10|*|30|*|10|*|30|*|px',
'borderradius' => '3',
),
array(
'backgroundcolor' =>
'04a0c3ff',
),
),
)
));
array_push($styles, array(
'id' => 1107,
'referencekey' => 1100,
'value' => array(
'name' => n2_('Rounded Rectangle
Purple'),
'data' => array(
array(
'backgroundcolor' =>
'8757b2ff',
'padding' =>
'10|*|30|*|10|*|30|*|px',
'borderradius' => '3',
),
array(
'backgroundcolor' =>
'7b51a1ff',
),
),
)
));
array_push($styles, array(
'id' => 1108,
'referencekey' => 1100,
'value' => array(
'name' => n2_('Rounded Grey'),
'data' => array(
array(
'backgroundcolor' =>
'81898dff',
'padding' =>
'10|*|30|*|10|*|30|*|px',
'borderradius' => '3',
),
),
)
));
array_push($styles, array(
'id' => 1109,
'referencekey' => 1100,
'value' => array(
'name' => n2_('Rounded Green'),
'data' => array(
array(
'backgroundcolor' =>
'5cba3cff',
'padding' =>
'10|*|30|*|10|*|30|*|px',
'borderradius' => '30',
),
),
)
));
array_push($styles, array(
'id' => 1110,
'referencekey' => 1100,
'value' => array(
'name' => n2_('Rounded Blue'),
'data' => array(
array(
'backgroundcolor' =>
'01add3ff',
'padding' =>
'10|*|30|*|10|*|30|*|px',
'borderradius' => '30',
),
),
)
));
array_push($styles, array(
'id' => 1111,
'referencekey' => 1100,
'value' => array(
'name' => n2_('Rounded Purple'),
'data' => array(
array(
'backgroundcolor' =>
'8757b2ff',
'padding' =>
'10|*|30|*|10|*|30|*|px',
'borderradius' => '30',
),
),
)
));
array_push($styles, array(
'id' => 1112,
'referencekey' => 1100,
'value' => array(
'name' => n2_('Rounded Grey'),
'data' => array(
array(
'backgroundcolor' =>
'81898dff',
'padding' =>
'10|*|30|*|10|*|30|*|px',
'borderradius' => '30',
),
),
)
));
array_push($styles, array(
'id' => 1113,
'referencekey' => 1100,
'value' => array(
'name' => n2_('Border Dark'),
'data' => array(
array(
'backgroundcolor' =>
'00000000',
'padding' =>
'10|*|30|*|10|*|30|*|px',
'border' =>
'2|*|solid|*|000000cc',
),
),
)
));
array_push($styles, array(
'id' => 1114,
'referencekey' => 1100,
'value' => array(
'name' => n2_('Border Light'),
'data' => array(
array(
'backgroundcolor' =>
'00000000',
'padding' =>
'10|*|30|*|10|*|30|*|px',
'border' =>
'2|*|solid|*|ffffffff',
),
),
)
));
array_push($sets, array(
'id' => 1800,
'referencekey' => '',
'value' => n2_('Other')
));
array_push($styles, array(
'id' => 1801,
'referencekey' => 1800,
'value' => array(
'name' => n2_('List'),
'data' => array(
array(
'padding' =>
'10|*|20|*|10|*|20|*|px',
'extra' => 'margin:0;'
),
),
)
));
array_push($sets, array(
'id' => 1900,
'referencekey' => '',
'value' => n2_('My styles')
));
}
public function fontStorage(&$sets, &$fonts) {
array_push($sets, array(
'id' => 1000,
'referencekey' => '',
'value' => n2_('Default')
));
array_push($fonts, array(
'id' => 1001,
'referencekey' => 1000,
'value' => array(
'name' => n2_('X-small Light'),
'data' => array(
array(
'color' => 'ffffffff',
'size' => '12||px',
),
),
)
));
array_push($fonts, array(
'id' => 1002,
'referencekey' => 1000,
'value' => array(
'name' => n2_('X-small Dark'),
'data' => array(
array(
'color' => '282828ff',
'size' => '12||px',
),
),
)
));
array_push($fonts, array(
'id' => 1003,
'referencekey' => 1000,
'value' => array(
'name' => n2_('Small Light'),
'data' => array(
array(
'color' => 'ffffffff',
'size' => '14||px',
),
),
)
));
array_push($fonts, array(
'id' => 1004,
'referencekey' => 1000,
'value' => array(
'name' => n2_('Small Dark'),
'data' => array(
array(
'color' => '282828ff',
'size' => '14||px',
),
),
)
));
array_push($fonts, array(
'id' => 1005,
'referencekey' => 1000,
'value' => array(
'name' => n2_('Medium Light'),
'data' => array(
array(
'color' => 'ffffffff',
'size' => '24||px',
),
),
)
));
array_push($fonts, array(
'id' => 1006,
'referencekey' => 1000,
'value' => array(
'name' => n2_('Medium Dark'),
'data' => array(
array(
'color' => '282828ff',
'size' => '24||px',
),
),
)
));
array_push($fonts, array(
'id' => 1007,
'referencekey' => 1000,
'value' => array(
'name' => n2_('Large Light'),
'data' => array(
array(
'color' => 'ffffffff',
'size' => '30||px',
),
),
)
));
array_push($fonts, array(
'id' => 1008,
'referencekey' => 1000,
'value' => array(
'name' => n2_('Large Dark'),
'data' => array(
array(
'color' => '282828ff',
'size' => '30||px',
),
),
)
));
array_push($fonts, array(
'id' => 1009,
'referencekey' => 1000,
'value' => array(
'name' => n2_('X-large Light'),
'data' => array(
array(
'color' => 'ffffffff',
'size' => '36||px',
'align' => 'center'
),
),
)
));
array_push($fonts, array(
'id' => 1010,
'referencekey' => 1000,
'value' => array(
'name' => n2_('X-large Dark'),
'data' => array(
array(
'color' => '282828ff',
'size' => '36||px',
),
),
)
));
array_push($sets, array(
'id' => 1100,
'referencekey' => '',
'value' => n2_('Center')
));
array_push($fonts, array(
'id' => 1101,
'referencekey' => 1100,
'value' => array(
'name' => n2_('X-small Light'),
'data' => array(
array(
'color' => 'ffffffff',
'size' => '12||px',
'align' => 'center'
),
),
)
));
array_push($fonts, array(
'id' => 1102,
'referencekey' => 1100,
'value' => array(
'name' => n2_('X-small Dark'),
'data' => array(
array(
'color' => '282828ff',
'size' => '12||px',
'align' => 'center'
),
),
)
));
array_push($fonts, array(
'id' => 1103,
'referencekey' => 1100,
'value' => array(
'name' => n2_('Small Light'),
'data' => array(
array(
'color' => 'ffffffff',
'size' => '14||px',
'align' => 'center'
),
),
)
));
array_push($fonts, array(
'id' => 1104,
'referencekey' => 1100,
'value' => array(
'name' => n2_('Small Dark'),
'data' => array(
array(
'color' => '282828ff',
'size' => '14||px',
'align' => 'center'
),
),
)
));
array_push($fonts, array(
'id' => 1105,
'referencekey' => 1100,
'value' => array(
'name' => n2_('Medium Light'),
'data' => array(
array(
'color' => 'ffffffff',
'size' => '24||px',
'align' => 'center'
),
),
)
));
array_push($fonts, array(
'id' => 1106,
'referencekey' => 1100,
'value' => array(
'name' => n2_('Medium Dark'),
'data' => array(
array(
'color' => '282828ff',
'size' => '24||px',
'align' => 'center'
),
),
)
));
array_push($fonts, array(
'id' => 1107,
'referencekey' => 1100,
'value' => array(
'name' => n2_('Large Light'),
'data' => array(
array(
'color' => 'ffffffff',
'size' => '30||px',
'align' => 'center'
),
),
)
));
array_push($fonts, array(
'id' => 1108,
'referencekey' => 1100,
'value' => array(
'name' => n2_('Large Dark'),
'data' => array(
array(
'color' => '282828ff',
'size' => '30||px',
'align' => 'center'
),
),
)
));
array_push($fonts, array(
'id' => 1109,
'referencekey' => 1100,
'value' => array(
'name' => n2_('X-large Light'),
'data' => array(
array(
'color' => 'ffffffff',
'size' => '36||px',
'align' => 'center'
),
),
)
));
array_push($fonts, array(
'id' => 1110,
'referencekey' => 1100,
'value' => array(
'name' => n2_('X-large Dark'),
'data' => array(
array(
'color' => '282828ff',
'size' => '36||px',
'align' => 'center'
),
),
)
));
array_push($sets, array(
'id' => 1300,
'referencekey' => '',
'value' => n2_('Link')
));
array_push($fonts, array(
'id' => 1303,
'referencekey' => 1300,
'value' => array(
'name' => n2_('Small Light'),
'data' => array(
array(
'color' => 'ffffffff',
'size' => '14||px',
'align' => 'left'
),
array(
'color' => '1890d7ff'
),
),
)
));
array_push($fonts, array(
'id' => 1304,
'referencekey' => 1300,
'value' => array(
'name' => n2_('Small Dark'),
'data' => array(
array(
'color' => '282828ff',
'size' => '14||px',
'align' => 'left'
),
array(
'color' => '1890d7ff'
),
),
)
));
array_push($sets, array(
'id' => 1900,
'referencekey' => '',
'value' => n2_('My fonts')
));
}
public function splitTextAnimationStorage(&$sets, &$animations)
{
array_push($sets, array(
'id' => 1000,
'referencekey' => '',
'value' => n2_('Default')
));
array_push($animations, array(
'id' => 1001,
'referencekey' => 1000,
'value' => array(
'name' => n2_('Fade'),
'data' => array(
'transformOrigin' =>
'50|*|50|*|0',
'animation' => array(
'opacity' => 0
)
)
)
));
array_push($animations, array(
'id' => 1002,
'referencekey' => 1000,
'value' => array(
'name' => n2_('Left'),
'data' => array(
'transformOrigin' =>
'50|*|50|*|0',
'animation' => array(
'opacity' => 0,
'x' => -100
)
)
)
));
array_push($animations, array(
'id' => 1003,
'referencekey' => 1000,
'value' => array(
'name' => n2_('Right'),
'data' => array(
'transformOrigin' =>
'50|*|50|*|0',
'animation' => array(
'opacity' => 0,
'x' => 100
)
)
)
));
array_push($animations, array(
'id' => 1004,
'referencekey' => 1000,
'value' => array(
'name' => n2_('Top'),
'data' => array(
'transformOrigin' =>
'50|*|50|*|0',
'animation' => array(
'opacity' => 0,
'y' => -80
)
)
)
));
array_push($animations, array(
'id' => 1005,
'referencekey' => 1000,
'value' => array(
'name' => n2_('Bottom'),
'data' => array(
'transformOrigin' =>
'50|*|50|*|0',
'animation' => array(
'opacity' => 0,
'y' => 80
)
)
)
));
array_push($animations, array(
'id' => 1006,
'referencekey' => 1000,
'value' => array(
'name' => n2_('Scale up'),
'data' => array(
'transformOrigin' =>
'50|*|50|*|0',
'animation' => array(
'opacity' => 0,
'scale' => 0
)
)
)
));
array_push($animations, array(
'id' => 1007,
'referencekey' => 1000,
'value' => array(
'name' => n2_('Scale down'),
'data' => array(
'transformOrigin' =>
'50|*|50|*|0',
'animation' => array(
'opacity' => 0,
'scale' => 5
)
)
)
));
array_push($animations, array(
'id' => 1008,
'referencekey' => 1000,
'value' => array(
'name' => n2_('Warp'),
'data' => array(
'transformOrigin' =>
'50|*|50|*|0',
'animation' => array(
'ease' => 'easeInBack',
'opacity' => 0,
'x' => 20,
'scale' => 5,
'rotationX' => 90
)
)
)
));
array_push($animations, array(
'id' => 1009,
'referencekey' => 1000,
'value' => array(
'name' => n2_('Twirl'),
'data' => array(
'transformOrigin' =>
'100|*|100|*|0',
'animation' => array(
'ease' => 'easeInBack',
'opacity' => 0,
'scale' => 5,
'rotationX' => 360,
'rotationY' => -360,
'rotationZ' => 360
)
)
)
));
array_push($animations, array(
'id' => 1010,
'referencekey' => 1000,
'value' => array(
'name' => n2_('Domino'),
'data' => array(
'transformOrigin' =>
'0|*|0|*|0',
'animation' => array(
'ease' => 'easeInBack',
'rotationY' => 90
)
)
)
));
array_push($animations, array(
'id' => 1011,
'referencekey' => 1000,
'value' => array(
'name' => n2_('Stand up'),
'data' => array(
'transformOrigin' =>
'100|*|100|*|0',
'animation' => array(
'ease' => 'easeInBack',
'opacity' => 0,
'rotationZ' => 90
)
)
)
));
array_push($animations, array(
'id' => 1012,
'referencekey' => 1000,
'value' => array(
'name' => n2_('Rotate down'),
'data' => array(
'transformOrigin' =>
'50|*|0|*|0',
'animation' => array(
'ease' => 'easeInBack',
'rotationX' => 90
)
)
)
));
array_push($animations, array(
'id' => 1013,
'referencekey' => 1000,
'value' => array(
'name' => n2_('Elastic'),
'data' => array(
'transformOrigin' =>
'50|*|50|*|0',
'animation' => array(
'ease' =>
'easeOutElastic',
'y' => 30,
'duration' => 1,
'opacity' => 0
)
)
)
));
array_push($animations, array(
'id' => 1014,
'referencekey' => 1000,
'value' => array(
'name' => n2_('Random elastic'),
'data' => array(
'transformOrigin' =>
'50|*|50|*|0',
'animation' => array(
'ease' =>
'easeOutElastic',
'y' => -30,
'duration' => 1,
'sort' => 'random',
'opacity' => 0
)
)
)
));
array_push($sets, array(
'id' => 1900,
'referencekey' => '',
'value' => n2_('My text
animations')
));
}
public function backgroundAnimationStorage(&$sets,
&$animations) {
array_push($sets, array(
'id' => 1000,
'referencekey' => '',
'value' => n2_('Default')
));
array_push($animations, array(
"id" => 1030,
'referencekey' => 1000,
"value" => array(
'name' => n2_('Slices - Single'),
'data' => array(
'type' => 'Slices',
'slices' => 1,
'direction' => 'horizontal',
)
)
));
array_push($animations, array(
"id" => 1031,
'referencekey' => 1000,
"value" => array(
'name' => n2_('Slices - Simple rows and
scale'),
'data' => array(
'type' => 'Slices',
'slices' => 6,
'direction' => 'horizontal',
'nextImage' => array(
array(
'scale' => 1.3,
'transformOrigin' => '60% 60%
0px'
),
array(
'scale' => 1
)
)
)
)
));
array_push($animations, array(
"id" => 1032,
'referencekey' => 1000,
"value" => array(
'name' => n2_('Slices - Simple rows and
rotate'),
'data' => array(
'type' => 'Slices',
'slices' => 8,
'direction' => 'horizontal',
'nextImage' => array(
array(
'scale' => 1.3,
'rotationZ' => 2,
'transformOrigin' => '60% 60%
0px'
),
array(
'scale' => 1,
'rotationZ' => 0
)
)
)
)
));
array_push($animations, array(
"id" => 1033,
'referencekey' => 1000,
"value" => array(
'name' => n2_('Slices - Simple rows
reversed'),
'data' => array(
'type' => 'Slices',
'slices' => 6,
'direction' => 'horizontal',
'isReversed' => true
)
)
));
array_push($animations, array(
"id" => 1034,
'referencekey' => 1000,
"value" => array(
'name' => n2_('Slices - Simple rows and
blur'),
'data' => array(
'type' => 'Slices',
'slices' => 3,
'direction' => 'horizontal',
'nextImage' => array(
array(
'n2blur' => 3,
'scale' => 1.1
),
array(
'n2blur' => 0.3,
'scale' => 1
)
)
)
)
));
array_push($animations, array(
"id" => 1035,
'referencekey' => 1000,
"value" => array(
'name' => n2_('Slices - Triangle'),
'data' => array(
'type' => 'Slices',
'slices' => 7,
'direction' => 'horizontal',
'tiles' => array(
'sequence' => 'FromCenter'
)
)
)
));
array_push($animations, array(
"id" => 1036,
'referencekey' => 1000,
"value" => array(
'name' => n2_('Slices - Reversed
triangle'),
'data' => array(
'type' => 'Slices',
'slices' => 5,
'direction' => 'horizontal',
'tiles' => array(
'sequence' => 'FromSide'
)
)
)
));
array_push($animations, array(
"id" => 1402,
'referencekey' => 1000,
"value" => array(
'name' => n2_('Scale to left'),
'data' => array(
'type' => 'Flat',
'tiles' => array(
'crop' => true,
'delay' => 0,
'sequence' =>
'ForwardDiagonal'
),
'main' => array(
'type' => 'both',
'duration' => 1,
'current' => array(
'ease' =>
'easeOutCubic',
'scale' => 0.7
),
'next' => array(
'ease' =>
'easeOutCubic',
'xP' => 100
)
),
'invert' => array(
'zIndex' => 2,
'current' => array(
'xP' => 100,
'scale' => 1
),
'next' => array(
'scale' => 0.7,
'xP' => 0
)
)
)
)
));
array_push($animations, array(
"id" => 1405,
'referencekey' => 1000,
"value" => array(
'name' => n2_('Rotate to left'),
'data' => array(
'type' => 'Flat',
'tiles' => array(
'cropOuter' => true,
'crop' => false,
'delay' => 0,
'sequence' =>
'ForwardDiagonal'
),
'main' => array(
'type' => 'both',
'duration' => 1,
'current' => array(
'ease' =>
'easeOutCubic',
'rotationY' => -90,
'xP' => -100,
'opacity' => 0,
'transformOrigin' => '100%
50%'
),
'next' => array(
'ease' =>
'easeOutCubic',
'xP' => 100
)
),
'invert' => array(
'zIndex' => 2,
'current' => array(
'xP' => 100,
'rotationY' => 0,
'opacity' => 1,
),
'next' => array(
'rotationY' => -90,
'xP' => -100,
'opacity' => 0,
'transformOrigin' => '100%
50%'
)
)
)
)
));
array_push($animations, array(
"id" => 1410,
'referencekey' => 1000,
"value" => array(
'name' => n2_('Fixed to left'),
'data' => array(
'type' => 'Flat',
'tiles' => array(
'delay' => 0,
'sequence' =>
'ForwardDiagonal'
),
'main' => array(
'type' => 'next',
'duration' => 1,
'next' => array(
'ease' =>
'easeOutCubic',
'xP' => 100
)
),
'invert' => array(
'type' => 'current',
'zIndex' => 2,
'current' => array(
'ease' =>
'easeOutCubic',
'xP' => 100
)
)
)
)
));
array_push($animations, array(
"id" => 1414,
'referencekey' => 1000,
"value" => array(
'name' => n2_('Parallax to left'),
'data' => array(
'type' => 'Flat',
'tiles' => array(
'delay' => 0,
'sequence' =>
'ForwardDiagonal'
),
'main' => array(
'type' => 'both',
'duration' => 1,
'current' => array(
'ease' =>
'easeOutCubic',
'xP' => -50
),
'next' => array(
'ease' =>
'easeOutCubic',
'xP' => 100
)
),
'invert' => array(
'zIndex' => 2,
'current' => array(
'xP' => 100
),
'next' => array(
'xP' => -50
)
)
)
)
));
array_push($animations, array(
"id" => 1001,
'referencekey' => 1000,
"value" => array(
'name' => n2_('Flow'),
'data' => array(
'type' => 'Flat',
'tiles' => array(
'crop' => false,
'delay' => 0,
'sequence' =>
'ForwardDiagonal'
),
'main' => array(
'type' => 'both',
'duration' => .75,
'current' => array(
'ease' =>
'easeOutCubic',
'scale' => 0.5,
'xP' => -100,
'opacity' => 0
),
'next' => array(
'ease' =>
'easeOutCubic',
'scale' => 0.5,
'xP' => 100
)
),
'invert' => array(
'current' => array(
'xP' => 100
),
'next' => array(
'xP' => -100
)
)
)
)
));
array_push($animations, array(
"id" => 1003,
'referencekey' => 1000,
"value" => array(
'name' => n2_('Flowing rows'),
'data' => array(
'type' => 'Flat',
'rows' => 5,
'tiles' => array(
'crop' => false,
'delay' => 0.05,
'sequence' => 'ForwardRow'
),
'main' => array(
'type' => 'both',
'duration' => .75,
'current' => array(
'ease' =>
'easeinQuad',
'scale' => 0.5,
'xP' => -100,
'opacity' => 0
),
'next' => array(
'ease' =>
'easeinQuad',
'scale' => 0.5,
'xP' => 100,
'opacity' => 0
)
),
'invert' => array(
'current' => array(
'xP' => 100
),
'next' => array(
'xP' => -100
)
),
'invertTiles' => array(
'sequence' => 'BackwardRow'
)
)
)
));
array_push($animations, array(
"id" => 1004,
'referencekey' => 1000,
"value" => array(
'name' => n2_('Flowing cols'),
'data' => array(
'type' => 'Flat',
'columns' => 5,
'tiles' => array(
'crop' => false,
'delay' => 0.05,
'sequence' => 'ForwardCol'
),
'main' => array(
'type' => 'both',
'duration' => .75,
'current' => array(
'ease' =>
'easeinQuad',
'scale' => 0.5,
'xP' => -100,
'opacity' => 0
),
'next' => array(
'ease' =>
'easeinQuad',
'scale' => 0.5,
'xP' => 100,
'opacity' => 0
)
),
'invert' => array(
'current' => array(
'xP' => 100
),
'next' => array(
'xP' => -100
)
),
'invertTiles' => array(
'sequence' => 'BackwardCol'
)
)
)
));
array_push($animations, array(
"id" => 1005,
'referencekey' => 1000,
"value" => array(
'name' => n2_('Flowing tiles'),
'data' => array(
'type' => 'Flat',
'columns' => 5,
'rows' => 5,
'tiles' => array(
'crop' => false,
'delay' => .0035,
'sequence' => 'ForwardRow'
),
'main' => array(
'type' => 'both',
'duration' => .75,
'current' => array(
'ease' =>
'easeinQuad',
'scale' => 0.5,
'xP' => -100,
'opacity' => 0,
'rotationY' => 90
),
'next' => array(
'ease' =>
'easeinQuad',
'scale' => 0.5,
'xP' => 100,
'opacity' => 0,
'rotationY' => 90
)
),
'invert' => array(
'current' => array(
'xP' => 100
),
'next' => array(
'xP' => -100
)
),
'invertTiles' => array(
'sequence' => 'BackwardRow'
)
)
)
));
array_push($animations, array(
"id" => 1007,
'referencekey' => 1000,
"value" => array(
'name' => n2_('Slide to left'),
'data' => array(
'type' => 'Flat',
'tiles' => array(
'delay' => 0,
'sequence' =>
'ForwardDiagonal'
),
'main' => array(
'type' => 'both',
'duration' => .8,
'current' => array(
'ease' =>
'easeOutCubic',
'xP' => -100
),
'next' => array(
'ease' =>
'easeOutCubic',
'xP' => 100
)
),
'invert' => array(
'current' => array(
'xP' => 100
),
'next' => array(
'xP' => -100
)
)
)
)
));
array_push($animations, array(
"id" => 1011,
'referencekey' => 1000,
"value" => array(
'name' => n2_('Stage'),
'data' => array(
'type' => 'Slixes',
'main' => array(
'duration' => 2
)
)
)
));
array_push($animations, array(
"id" => 1012,
'referencekey' => 1000,
"value" => array(
'name' => n2_('Zoom'),
'data' => array(
'type' => 'Flat',
'tiles' => array(
'crop' => false,
'delay' => 0,
'sequence' =>
'ForwardDiagonal'
),
'main' => array(
'type' => 'both',
'duration' => .75,
'current' => array(
'ease' =>
'easeOutCubic',
'scale' => 0.5,
'opacity' => 0
),
'next' => array(
'ease' =>
'easeOutCubic',
'opacity' => 0,
'scale' => 1.5
)
),
'invert' => array(
'current' => array(
'scale' => 1.5
),
'next' => array(
'scale' => 0.5
)
)
)
)
));
array_push($animations, array(
"id" => 1025,
'referencekey' => 1000,
"value" => array(
'name' => n2_('Zoom out'),
'data' => array(
'type' => 'Flat',
'tiles' => array(
'crop' => false,
'delay' => 0,
'sequence' =>
'ForwardDiagonal'
),
'main' => array(
'type' => 'both',
'duration' => .75,
'current' => array(
'ease' =>
'easeOutCubic',
'scale' => 1.5,
'opacity' => 0
),
'next' => array(
'ease' =>
'easeOutCubic',
'opacity' => 0,
'scale' => 0.5
)
),
'invert' => array(
'current' => array(
'scale' => 0.5
),
'next' => array(
'scale' => 1.5
)
)
)
)
));
array_push($animations, array(
"id" => 1013,
'referencekey' => 1000,
"value" => array(
'name' => n2_('Fade'),
'data' => array(
'type' => 'Flat',
'tiles' => array(
'delay' => 0,
'sequence' =>
'ForwardDiagonal'
),
'main' => array(
'type' => 'both',
'duration' => 1,
'zIndex' => 2,
'current' => array(
'ease' =>
'easeOutCubic',
'opacity' => 0
)
)
)
)
));
array_push($animations, array(
"id" => 1014,
'referencekey' => 1000,
"value" => array(
'name' => n2_('Curtain to left'),
'data' => array(
'type' => 'Flat',
'rows' => 1,
'columns' => 25,
'tiles' => array(
'delay' => .03,
'sequence' => 'BackwardCol'
),
'main' => array(
'type' => 'next',
'duration' => .35,
'next' => array(
'ease' =>
'easeInQuart',
'opacity' => "0",
'xP' => -100
)
),
'invert' => array(
'next' => array(
'xP' => 100
)
),
'invertTiles' => array(
'sequence' => 'ForwardCol'
)
)
)
));
array_push($animations, array(
"id" => 1018,
'referencekey' => 1000,
"value" => array(
'name' => n2_('Blocks to left'),
'data' => array(
'type' => 'Flat',
'rows' => 4,
'columns' => 5,
'tiles' => array(
'delay' => .5,
'sequence' => 'Random'
),
'main' => array(
'type' => 'both',
'duration' => .5,
'current' => array(
'ease' => 'easeInQuart',
'xP' => -100
),
'next' => array(
'ease' => 'easeInQuart',
'xP' => 100
)
),
'invert' => array(
'current' => array(
'ease' => 'easeInQuart',
'xP' => 100
),
'next' => array(
'xP' => -100
)
)
)
)
));
array_push($animations, array(
"id" => 1022,
'referencekey' => 1000,
"value" => array(
'name' => n2_('Slices to left'),
'data' => array(
'type' => 'Flat',
'rows' => 10,
'columns' => 1,
'tiles' => array(
'delay' => .1,
'sequence' => 'ForwardRow'
),
'main' => array(
'type' => 'both',
'duration' => .6,
'current' => array(
'ease' => 'easeInQuart',
'xP' => -100
),
'next' => array(
'ease' => 'easeInQuart',
'xP' => 100
)
),
'invert' => array(
'current' => array(
'ease' => 'easeInQuart',
'xP' => 100
),
'next' => array(
'xP' => -100
)
)
)
)
));
array_push($animations, array(
"id" => 1023,
'referencekey' => 1000,
"value" => array(
'name' => n2_('Reversed slices to
left'),
'data' => array(
'type' => 'Flat',
'rows' => 10,
'columns' => 1,
'tiles' => array(
'delay' => .1,
'sequence' => 'BackwardRow'
),
'main' => array(
'type' => 'both',
'duration' => .6,
'current' => array(
'ease' => 'easeInQuart',
'xP' => -100
),
'next' => array(
'ease' => 'easeInQuart',
'xP' => 100
)
),
'invert' => array(
'current' => array(
'ease' => 'easeInQuart',
'xP' => 100
),
'next' => array(
'xP' => -100
)
)
)
)
));
array_push($animations, array(
"id" => 1024,
'referencekey' => 1000,
"value" => array(
'name' => n2_('Puzzle'),
'data' => array(
'type' => 'Flat',
'rows' => 5,
'columns' => 7,
'tiles' => array(
'delay' => 1,
'sequence' => 'Random'
),
'main' => array(
'type' => 'next',
'duration' => 0.8,
'next' => array(
'ease' =>
'easeInQuart',
'opacity' => 0
)
)
)
)
));
array_push($animations, array(
"id" => 1101,
'referencekey' => 1000,
"value" => array(
'name' => n2_('Switching to left'),
'data' => array(
'type' => 'Flat',
'tiles' => array(
'crop' => false,
'delay' => 0,
'sequence' =>
'ForwardDiagonal'
),
'main' => array(
'type' => 'both',
'duration' => .8,
'current' => array(
'xP' => -100,
'opacity' => 0
),
'next' => array(
'xP' => 150,
'rotationY' => -90,
'z' => -500,
'opacity' => 0
)
),
'invert' => array(
'current' => array(
'xP' => 100
),
'next' => array(
'xP' => -150,
'rotationY' => 90
)
)
)
)
));
array_push($animations, array(
"id" => 1105,
'referencekey' => 1000,
"value" => array(
'name' => n2_('Explode'),
'data' => array(
'type' => 'Explode',
'rows' => 3,
'columns' => 6,
'tiles' => array(
'delay' => 0.3,
'sequence' => 'Random'
),
'main' => array(
'type' => 'next',
'duration' => 1.35,
'current' => array(
'ease' =>
'easeInQuart',
'opacity' => 0,
'z' => 700
)
)
)
)
));
array_push($animations, array(
"id" => 1106,
'referencekey' => 1000,
"value" => array(
'name' => n2_('Rebuild'),
'data' => array(
'type' => 'ExplodeReversed',
'rows' => 3,
'columns' => 6,
'tiles' => array(
'delay' => 0.6,
'sequence' => 'Random'
),
'main' => array(
'type' => 'next',
'duration' => 1.35,
'current' => array(
'ease' =>
'easeInQuart',
'opacity' => 0,
'z' => 300
)
)
)
)
));
array_push($animations, array(
"id" => 1107,
'referencekey' => 1000,
"value" => array(
'name' => n2_('Page turn to left'),
'data' => array(
'type' => 'Turn'
)
)
));
array_push($animations, array(
"id" => 1113,
'referencekey' => 1000,
"value" => array(
'name' => n2_('3D bricks to left'),
'data' => array(
'type' => 'Cubic',
'columns' => 4,
'rows' => 3,
'tiles' => array(
'delay' => 0.05,
'sequence' => 'ForwardRow'
),
'main' => array(
'side' => 'BackInvert',
'duration' => 0.6,
'ease' => 'easeInCubic',
'real3D' => true
),
'invert' => array(
'side' => 'Back'
),
'invertTiles' => array(
'sequence' => 'BackwardRow'
),
'pre' => array(
array(
'scale' => 0.9,
'scaleZ' => 0.9,
'duration' => 0.3,
'ease' =>
'easeInCubic'
)
),
'post' => array(
array(
'scale' => 1,
'scaleZ' => 1,
'duration' => 0.3,
'ease' =>
'easeInCubic'
)
)
)
)
));
array_push($animations, array(
"id" => 1110,
'referencekey' => 1000,
"value" => array(
'name' => n2_('Vertical spin to
left'),
'data' => array(
'type' => 'Cubic',
'depth' => 100,
'main' => array(
'side' => 'BackInvert',
'duration' => 0.8,
'ease' => 'easeInCubic',
'real3D' => true
),
'invert' => array(
'side' => 'Back'
)
)
)
));
array_push($animations, array(
"id" => 1117,
'referencekey' => 1000,
"value" => array(
'name' => n2_('3D rows to left'),
'data' => array(
'type' => 'Cubic',
'rows' => 7,
'fullCube' => false,
'depth' => 16,
'tiles' => array(
'delay' => 0.05,
'sequence' => 'ForwardRow'
),
'main' => array(
'side' => 'BackInvert',
'duration' => 1.2,
'ease' => 'easeInBack'
),
'invert' => array(
'side' => 'Back'
),
'invertTiles' => array(
'sequence' => 'BackwardRow'
),
'pre' => array(
array(
'scale' => 0.85,
'scaleZ' => 0.85,
'duration' => 0.6,
'ease' =>
'easeOutBack'
)
),
'post' => array(
array(
'scale' => 1,
'scaleZ' => 1,
'duration' => 0.6,
'ease' =>
'easeOutBack'
)
)
)
)
));
array_push($animations, array(
"id" => 1121,
'referencekey' => 1000,
"value" => array(
'name' => n2_('3D columns to left'),
'data' => array(
'type' => 'Cubic',
'columns' => 7,
'fullCube' => false,
'depth' => 16,
'tiles' => array(
'delay' => 0.05,
'sequence' => 'ForwardRow'
),
'main' => array(
'side' => 'BackInvert',
'duration' => 1.2,
'ease' => 'easeInBack'
),
'invert' => array(
'side' => 'Back'
),
'invertTiles' => array(
'sequence' => 'BackwardRow'
)
)
)
));
array_push($animations, array(
"id" => 1125,
'referencekey' => 1000,
"value" => array(
'name' => n2_('Spinning cuboid to
left'),
'data' => array(
'type' => 'Cubic',
'columns' => 1,
'rows' => 1,
'main' => array(
'side' => 'Right',
'duration' => 0.8,
'ease' => 'easeInCubic',
'real3D' => true
),
'invert' => array(
'side' => 'Left'
)
)
)
));
array_push($animations, array(
"id" => 1129,
'referencekey' => 1000,
"value" => array(
'name' => n2_('Turning cuboid to
left'),
'data' => array(
'type' => 'Cubic',
'columns' => 1,
'rows' => 1,
'depth' => 'width',
'main' => array(
'side' => 'BackInvert',
'duration' => 1.5,
'ease' => 'easeInCubic',
'real3D' => true
),
'invert' => array(
'side' => 'Back'
)
)
)
));
array_push($sets, array(
'id' => 1100,
'referencekey' => '',
'value' => n2_('Vertical')
));
array_push($animations, array(
"id" => 1040,
'referencekey' => 1100,
"value" => array(
'name' => n2_('Slices - Single'),
'data' => array(
'type' => 'Slices',
'slices' => 1,
'direction' => 'vertical',
)
)
));
array_push($animations, array(
"id" => 1041,
'referencekey' => 1100,
"value" => array(
'name' => n2_('Slices - Simple rows and
scale'),
'data' => array(
'type' => 'Slices',
'slices' => 6,
'direction' => 'vertical',
'nextImage' => array(
array(
'scale' => 1.3,
'transformOrigin' => '60% 60%
0px'
),
array(
'scale' => 1
)
)
)
)
));
array_push($animations, array(
"id" => 1042,
'referencekey' => 1100,
"value" => array(
'name' => n2_('Slices - Simple rows and
rotate'),
'data' => array(
'type' => 'Slices',
'slices' => 8,
'direction' => 'vertical',
'nextImage' => array(
array(
'scale' => 1.3,
'rotationZ' => 2,
'transformOrigin' => '60% 60%
0px'
),
array(
'scale' => 1,
'rotationZ' => 0
)
)
)
)
));
array_push($animations, array(
"id" => 1043,
'referencekey' => 1100,
"value" => array(
'name' => n2_('Slices - Simple rows
reversed'),
'data' => array(
'type' => 'Slices',
'slices' => 6,
'direction' => 'vertical',
'isReversed' => true
)
)
));
array_push($animations, array(
"id" => 1044,
'referencekey' => 1100,
"value" => array(
'name' => n2_('Slices - Simple rows and
blur'),
'data' => array(
'type' => 'Slices',
'slices' => 3,
'direction' => 'vertical',
'nextImage' => array(
array(
'n2blur' => 3,
'scale' => 1.1
),
array(
'n2blur' => 0.3,
'scale' => 1
)
)
)
)
));
array_push($animations, array(
"id" => 1045,
'referencekey' => 1100,
"value" => array(
'name' => n2_('Slices - Triangle'),
'data' => array(
'type' => 'Slices',
'slices' => 7,
'direction' => 'vertical',
'tiles' => array(
'sequence' => 'FromCenter'
)
)
)
));
array_push($animations, array(
"id" => 1046,
'referencekey' => 1100,
"value" => array(
'name' => n2_('Slices - Reversed
triangle'),
'data' => array(
'type' => 'Slices',
'slices' => 5,
'direction' => 'vertical',
'tiles' => array(
'sequence' => 'FromSide'
)
)
)
));
array_push($animations, array(
"id" => 1404,
'referencekey' => 1100,
"value" => array(
'name' => n2_('Scale to top'),
'data' => array(
'type' => 'Flat',
'tiles' => array(
'crop' => true,
'delay' => 0,
'sequence' =>
'ForwardDiagonal'
),
'main' => array(
'type' => 'both',
'duration' => 1,
'current' => array(
'ease' =>
'easeOutCubic',
'scale' => 0.7
),
'next' => array(
'ease' =>
'easeOutCubic',
'yP' => 100
)
),
'invert' => array(
'zIndex' => 2,
'current' => array(
'scale' => 1,
'yP' => 100
),
'next' => array(
'scale' => 0.7,
'yP' => 0
)
)
)
)
));
array_push($animations, array(
"id" => 1403,
'referencekey' => 1100,
"value" => array(
'name' => n2_('Scale to bottom'),
'data' => array(
'type' => 'Flat',
'tiles' => array(
'crop' => true,
'delay' => 0,
'sequence' =>
'ForwardDiagonal'
),
'main' => array(
'type' => 'both',
'duration' => 1,
'current' => array(
'ease' =>
'easeOutCubic',
'scale' => 0.7
),
'next' => array(
'ease' =>
'easeOutCubic',
'yP' => -100
)
),
'invert' => array(
'zIndex' => 2,
'current' => array(
'scale' => 1,
'yP' => -100
),
'next' => array(
'scale' => 0.7,
'yP' => 0
)
)
)
)
));
array_push($animations, array(
"id" => 1408,
'referencekey' => 1100,
"value" => array(
'name' => n2_('Rotate to top'),
'data' => array(
'type' => 'Flat',
'tiles' => array(
'cropOuter' => true,
'crop' => false,
'delay' => 0,
'sequence' =>
'ForwardDiagonal'
),
'main' => array(
'type' => 'both',
'duration' => 1,
'current' => array(
'ease' =>
'easeOutCubic',
'rotationX' => 90,
'top' =>
'-100%',
'opacity' => 0,
'transformOrigin' => '50%
100%'
),
'next' => array(
'ease' =>
'easeOutCubic',
'yP' => 100
)
),
'invert' => array(
'zIndex' => 2,
'current' => array(
'yP' => 100,
'rotationX' => 0,
'opacity' => 1,
),
'next' => array(
'rotationX' => 90,
'yP' => -100,
'opacity' => 0,
'transformOrigin' => '50%
100%'
)
)
)
)
));
array_push($animations, array(
"id" => 1407,
'referencekey' => 1100,
"value" => array(
'name' => n2_('Rotate to bottom'),
'data' => array(
'type' => 'Flat',
'tiles' => array(
'cropOuter' => true,
'crop' => false,
'delay' => 0,
'sequence' =>
'ForwardDiagonal'
),
'main' => array(
'type' => 'both',
'duration' => 1,
'current' => array(
'ease' =>
'easeOutCubic',
'rotationX' => -90,
'yP' => 100,
'opacity' => 0,
'transformOrigin' => '50%
0'
),
'next' => array(
'ease' =>
'easeOutCubic',
'yP' => -100
)
),
'invert' => array(
'zIndex' => 2,
'current' => array(
'yP' => -100,
'rotationX' => 0,
'opacity' => 1,
),
'next' => array(
'rotationX' => -90,
'yP' => 100,
'opacity' => 0,
'transformOrigin' => '50%
0'
)
)
)
)
));
array_push($animations, array(
"id" => 1412,
'referencekey' => 1100,
"value" => array(
'name' => n2_('Fixed to top'),
'data' => array(
'type' => 'Flat',
'tiles' => array(
'delay' => 0,
'sequence' =>
'ForwardDiagonal'
),
'main' => array(
'type' => 'next',
'duration' => 1,
'next' => array(
'ease' =>
'easeOutCubic',
'yP' => 100
)
),
'invert' => array(
'type' => 'current',
'zIndex' => 2,
'current' => array(
'ease' =>
'easeOutCubic',
'yP' => 100
)
)
)
)
));
array_push($animations, array(
"id" => 1411,
'referencekey' => 1100,
"value" => array(
'name' => n2_('Fixed to bottom'),
'data' => array(
'type' => 'Flat',
'tiles' => array(
'delay' => 0,
'sequence' =>
'ForwardDiagonal'
),
'main' => array(
'type' => 'next',
'duration' => 1,
'next' => array(
'ease' =>
'easeOutCubic',
'yP' => -100
)
),
'invert' => array(
'type' => 'current',
'zIndex' => 2,
'current' => array(
'ease' =>
'easeOutCubic',
'yP' => -100
)
)
)
)
));
array_push($animations, array(
"id" => 1416,
'referencekey' => 1100,
"value" => array(
'name' => n2_('Parallax to top'),
'data' => array(
'type' => 'Flat',
'tiles' => array(
'delay' => 0,
'sequence' =>
'ForwardDiagonal'
),
'main' => array(
'type' => 'both',
'duration' => 1,
'current' => array(
'ease' =>
'easeOutCubic',
'yP' => -50
),
'next' => array(
'ease' =>
'easeOutCubic',
'yP' => 100
)
),
'invert' => array(
'zIndex' => 2,
'current' => array(
'yP' => 100
),
'next' => array(
'yP' => -50
)
)
)
)
));
array_push($animations, array(
"id" => 1415,
'referencekey' => 1100,
"value" => array(
'name' => n2_('Parallax to bottom'),
'data' => array(
'type' => 'Flat',
'tiles' => array(
'delay' => 0,
'sequence' =>
'ForwardDiagonal'
),
'main' => array(
'type' => 'both',
'duration' => 1,
'current' => array(
'ease' =>
'easeOutCubic',
'yP' => 50
),
'next' => array(
'ease' =>
'easeOutCubic',
'yP' => -100
)
),
'invert' => array(
'zIndex' => 2,
'current' => array(
'yP' => -100
),
'next' => array(
'yP' => 50
)
)
)
)
));
array_push($animations, array(
"id" => 1006,
'referencekey' => 1100,
"value" => array(
'name' => n2_('Flowing tiles
vertical'),
'data' => array(
'type' => 'Flat',
'columns' => 5,
'rows' => 5,
'tiles' => array(
'crop' => false,
'delay' => .0035,
'sequence' => 'ForwardRow'
),
'main' => array(
'type' => 'both',
'duration' => .75,
'current' => array(
'ease' =>
'easeinQuad',
'scale' => 0.5,
'yP' => -100,
'opacity' => 0
),
'next' => array(
'ease' =>
'easeinQuad',
'scale' => 0.5,
'yP' => 100,
'opacity' => 0
)
),
'invert' => array(
'current' => array(
'yP' => 100
),
'next' => array(
'yP' => -100
)
),
'invertTiles' => array(
'sequence' => 'BackwardRow'
)
)
)
));
array_push($animations, array(
"id" => 1009,
'referencekey' => 1100,
"value" => array(
'name' => n2_('Slide to bottom'),
'data' => array(
'type' => 'Flat',
'tiles' => array(
'delay' => 0,
'sequence' =>
'ForwardDiagonal'
),
'main' => array(
'type' => 'both',
'duration' => .8,
'current' => array(
'ease' =>
'easeOutCubic',
'yP' => 100
),
'next' => array(
'ease' =>
'easeOutCubic',
'yP' => -100
)
),
'invert' => array(
'current' => array(
'yP' => -100
),
'next' => array(
'yP' => 100
)
)
)
)
));
array_push($animations, array(
"id" => 1010,
'referencekey' => 1100,
"value" => array(
'name' => n2_('Slide to top'),
'data' => array(
'type' => 'Flat',
'tiles' => array(
'delay' => 0,
'sequence' =>
'ForwardDiagonal'
),
'main' => array(
'type' => 'both',
'duration' => .8,
'current' => array(
'ease' =>
'easeOutCubic',
'yP' => -100
),
'next' => array(
'ease' =>
'easeOutCubic',
'yP' => 100
)
),
'invert' => array(
'current' => array(
'yP' => 100
),
'next' => array(
'yP' => -100
)
)
)
)
));
array_push($animations, array(
"id" => 1016,
'referencekey' => 1100,
"value" => array(
'name' => n2_('Curtain to bottom'),
'data' => array(
'type' => 'Flat',
'rows' => 25,
'columns' => 1,
'tiles' => array(
'delay' => .03,
'sequence' => 'ForwardRow'
),
'main' => array(
'type' => 'next',
'duration' => .35,
'next' => array(
'ease' =>
'easeInQuart',
'opacity' => "0",
'yP' => 100
)
),
'invert' => array(
'next' => array(
'yP' => -100
)
),
'invertTiles' => array(
'sequence' => 'BackwardRow'
)
)
)
));
array_push($animations, array(
"id" => 1017,
'referencekey' => 1100,
"value" => array(
'name' => n2_('Curtain to top'),
'data' => array(
'type' => 'Flat',
'rows' => 25,
'columns' => 1,
'tiles' => array(
'delay' => .03,
'sequence' => 'BackwardRow'
),
'main' => array(
'type' => 'next',
'duration' => .35,
'next' => array(
'ease' =>
'easeInQuart',
'opacity' => "0",
'yP' => -100
)
),
'invert' => array(
'next' => array(
'yP' => 100
)
),
'invertTiles' => array(
'sequence' => 'ForwardRow'
)
)
)
));
array_push($animations, array(
"id" => 1103,
'referencekey' => 1100,
"value" => array(
'name' => n2_('Switching to
bottom'),
'data' => array(
'type' => 'Flat',
'tiles' => array(
'crop' => false,
'delay' => 0,
'sequence' =>
'ForwardDiagonal'
),
'main' => array(
'type' => 'both',
'duration' => .8,
'current' => array(
'yP' => 100,
'opacity' => 0
),
'next' => array(
'yP' => -150,
'rotationX' => 90,
'z' => -500,
'opacity' => 0
)
),
'invert' => array(
'current' => array(
'yP' => -100
),
'next' => array(
'yP' => 150,
'rotationX' => -90
)
)
)
)
));
array_push($animations, array(
"id" => 1104,
'referencekey' => 1100,
"value" => array(
'name' => n2_('Switching to top'),
'data' => array(
'type' => 'Flat',
'tiles' => array(
'crop' => false,
'delay' => 0,
'sequence' =>
'ForwardDiagonal'
),
'main' => array(
'type' => 'both',
'duration' => .8,
'current' => array(
'yP' => -100,
'opacity' => 0
),
'next' => array(
'yP' => 150,
'rotationX' => 90,
'z' => -500,
'opacity' => 0
)
),
'invert' => array(
'current' => array(
'yP' => 100
),
'next' => array(
'yP' => -150,
'rotationX' => -90
)
)
)
)
));
array_push($animations, array(
"id" => 1111,
'referencekey' => 1100,
"value" => array(
'name' => n2_('Horizontal spin to
bottom'),
'data' => array(
'type' => 'Cubic',
'depth' => 100,
'main' => array(
'side' => 'BackInvert',
'duration' => 0.8,
'ease' =>
'easeInCubic',
'real3D' => true,
'direction' => 'vertical'
),
'invert' => array(
'side' => 'Back'
)
)
)
));
array_push($animations, array(
"id" => 1112,
'referencekey' => 1100,
"value" => array(
'name' => n2_('Horizontal spin to
top'),
'data' => array(
'type' => 'Cubic',
'depth' => 100,
'main' => array(
'side' => 'Back',
'duration' => 0.8,
'ease' =>
'easeInCubic',
'real3D' => true,
'direction' => 'vertical'
),
'invert' => array(
'side' => 'BackInvert'
)
)
)
));
array_push($animations, array(
"id" => 1115,
'referencekey' => 1100,
"value" => array(
'name' => n2_('3D bricks to
bottom'),
'data' => array(
'type' => 'Cubic',
'columns' => 4,
'rows' => 3,
'tiles' => array(
'delay' => 0.05,
'sequence' => 'ForwardRow'
),
'main' => array(
'side' => 'BackInvert',
'duration' => 0.6,
'ease' =>
'easeInCubic',
'real3D' => true,
'direction' => 'vertical'
),
'invert' => array(
'side' => 'Back'
),
'invertTiles' => array(
'sequence' => 'BackwardRow'
),
'pre' => array(
array(
'scale' => 0.9,
'scaleZ' => 0.9,
'duration' => 0.3,
'ease' =>
'easeInCubic'
)
),
'post' => array(
array(
'scale' => 1,
'scaleZ' => 1,
'duration' => 0.3,
'ease' =>
'easeInCubic'
)
)
)
)
));
array_push($animations, array(
"id" => 1116,
'referencekey' => 1100,
"value" => array(
'name' => n2_('3D bricks to top'),
'data' => array(
'type' => 'Cubic',
'columns' => 4,
'rows' => 3,
'tiles' => array(
'delay' => 0.05,
'sequence' => 'ForwardRow'
),
'main' => array(
'side' => 'Back',
'duration' => 0.6,
'ease' =>
'easeInCubic',
'real3D' => true,
'direction' => 'vertical'
),
'invert' => array(
'side' => 'BackInvert'
),
'invertTiles' => array(
'sequence' => 'BackwardRow'
),
'pre' => array(
array(
'scale' => 0.9,
'scaleZ' => 0.9,
'duration' => 0.3,
'ease' =>
'easeInCubic'
)
),
'post' => array(
array(
'scale' => 1,
'scaleZ' => 1,
'duration' => 0.3,
'ease' =>
'easeInCubic'
)
)
)
)
));
array_push($animations, array(
"id" => 1119,
'referencekey' => 1100,
"value" => array(
'name' => n2_('3D rows to bottom'),
'data' => array(
'type' => 'Cubic',
'rows' => 7,
'fullCube' => false,
'depth' => 16,
'tiles' => array(
'delay' => 0.05,
'sequence' => 'ForwardRow'
),
'main' => array(
'side' => 'BackInvert',
'duration' => 1.2,
'ease' => 'easeInBack',
'direction' => 'vertical'
),
'invert' => array(
'side' => 'Back'
),
'invertTiles' => array(
'sequence' => 'BackwardRow'
),
'pre' => array(
array(
'scale' => 0.85,
'scaleZ' => 0.85,
'duration' => 0.6,
'ease' =>
'easeOutBack'
)
),
'post' => array(
array(
'scale' => 1,
'scaleZ' => 1,
'duration' => 0.6,
'ease' =>
'easeOutBack'
)
)
)
)
));
array_push($animations, array(
"id" => 1120,
'referencekey' => 1100,
"value" => array(
'name' => n2_('3D rows to top'),
'data' => array(
'type' => 'Cubic',
'rows' => 7,
'fullCube' => false,
'depth' => 16,
'tiles' => array(
'delay' => 0.05,
'sequence' => 'ForwardRow'
),
'main' => array(
'side' => 'Back',
'duration' => 1.2,
'ease' => 'easeInBack',
'direction' => 'vertical'
),
'invert' => array(
'side' => 'BackInvert'
),
'invertTiles' => array(
'sequence' => 'BackwardRow'
),
'pre' => array(
array(
'scale' => 0.85,
'scaleZ' => 0.85,
'duration' => 0.6,
'ease' =>
'easeOutBack'
)
),
'post' => array(
array(
'scale' => 1,
'scaleZ' => 1,
'duration' => 0.6,
'ease' =>
'easeOutBack'
)
)
)
)
));
array_push($animations, array(
"id" => 1123,
'referencekey' => 1100,
"value" => array(
'name' => n2_('3D columns to
bottom'),
'data' => array(
'type' => 'Cubic',
'columns' => 7,
'fullCube' => false,
'depth' => 16,
'tiles' => array(
'delay' => 0.05,
'sequence' => 'ForwardRow'
),
'main' => array(
'side' => 'BackInvert',
'duration' => 1.2,
'ease' => 'easeInBack',
'direction' => 'vertical'
),
'invert' => array(
'side' => 'Back'
),
'invertTiles' => array(
'sequence' => 'BackwardRow'
)
)
)
));
array_push($animations, array(
"id" => 1124,
'referencekey' => 1100,
"value" => array(
'name' => n2_('3D columns to top'),
'data' => array(
'type' => 'Cubic',
'columns' => 7,
'fullCube' => false,
'depth' => 16,
'tiles' => array(
'delay' => 0.05,
'sequence' => 'ForwardRow'
),
'main' => array(
'side' => 'Back',
'duration' => 1.2,
'ease' => 'easeInBack',
'direction' => 'vertical'
),
'invert' => array(
'side' => 'BackInvert'
),
'invertTiles' => array(
'sequence' => 'BackwardRow'
)
)
)
));
array_push($animations, array(
"id" => 1127,
'referencekey' => 1100,
"value" => array(
'name' => n2_('Spinning cuboid to
bottom'),
'data' => array(
'type' => 'Cubic',
'columns' => 1,
'rows' => 1,
'main' => array(
'side' => 'Top',
'duration' => 0.8,
'ease' => 'easeInCubic',
'real3D' => true
),
'invert' => array(
'side' => 'Bottom'
)
)
)
));
array_push($animations, array(
"id" => 1128,
'referencekey' => 1100,
"value" => array(
'name' => n2_('Spinning cuboid to
top'),
'data' => array(
'type' => 'Cubic',
'columns' => 1,
'rows' => 1,
'main' => array(
'side' => 'Bottom',
'duration' => 0.8,
'ease' => 'easeInCubic',
'real3D' => true
),
'invert' => array(
'side' => 'Top'
)
)
)
));
array_push($animations, array(
"id" => 1131,
'referencekey' => 1100,
"value" => array(
'name' => n2_('Turning cuboid to
bottom'),
'data' => array(
'type' => 'Cubic',
'columns' => 1,
'rows' => 1,
'depth' => 'height',
'main' => array(
'side' => 'BackInvert',
'duration' => 1.5,
'ease' =>
'easeInCubic',
'real3D' => true,
'direction' => 'vertical'
),
'invert' => array(
'side' => 'Back'
)
)
)
));
array_push($animations, array(
"id" => 1132,
'referencekey' => 1100,
"value" => array(
'name' => n2_('Turning cuboid to
top'),
'data' => array(
'type' => 'Cubic',
'columns' => 1,
'rows' => 1,
'depth' => 'height',
'main' => array(
'side' => 'Back',
'duration' => 1.5,
'ease' =>
'easeInCubic',
'real3D' => true,
'direction' => 'vertical'
),
'invert' => array(
'side' => 'BackInvert'
)
)
)
));
array_push($sets, array(
'id' => 1200,
'referencekey' => '',
'value' => 'RTL'
));
array_push($animations, array(
"id" => 1401,
'referencekey' => 1200,
"value" => array(
'name' => n2_('Scale to right'),
'data' => array(
'type' => 'Flat',
'tiles' => array(
'crop' => true,
'delay' => 0,
'sequence' =>
'ForwardDiagonal'
),
'main' => array(
'type' => 'both',
'duration' => 1,
'current' => array(
'ease' =>
'easeOutCubic',
'scale' => 0.7
),
'next' => array(
'ease' =>
'easeOutCubic',
'xP' => -100
)
),
'invert' => array(
'zIndex' => 2,
'current' => array(
'xP' => -100,
'scale' => 1
),
'next' => array(
'scale' => 0.7,
'xP' => 0
)
)
)
)
));
array_push($animations, array(
"id" => 1406,
'referencekey' => 1200,
"value" => array(
'name' => n2_('Rotate to right'),
'data' => array(
'type' => 'Flat',
'tiles' => array(
'cropOuter' => true,
'crop' => false,
'delay' => 0,
'sequence' =>
'ForwardDiagonal'
),
'main' => array(
'type' => 'both',
'duration' => 1,
'current' => array(
'ease' =>
'easeOutCubic',
'rotationY' => 90,
'xP' => 100,
'opacity' => 0,
'transformOrigin' => '0
50%'
),
'next' => array(
'ease' =>
'easeOutCubic',
'xP' => -100
)
),
'invert' => array(
'zIndex' => 2,
'current' => array(
'xP' => -100,
'rotationY' => 0,
'opacity' => 1,
),
'next' => array(
'rotationY' => 90,
'xP' => 100,
'opacity' => 0,
'transformOrigin' => '0
50%'
)
)
)
)
));
array_push($animations, array(
"id" => 1409,
'referencekey' => 1200,
"value" => array(
'name' => n2_('Fixed to right'),
'data' => array(
'type' => 'Flat',
'tiles' => array(
'delay' => 0,
'sequence' =>
'ForwardDiagonal'
),
'main' => array(
'type' => 'next',
'duration' => 1,
'next' => array(
'ease' =>
'easeOutCubic',
'xP' => -100
)
),
'invert' => array(
'type' => 'current',
'zIndex' => 2,
'current' => array(
'ease' =>
'easeOutCubic',
'xP' => -100
)
)
)
)
));
array_push($animations, array(
"id" => 1413,
'referencekey' => 1200,
"value" => array(
'name' => n2_('Parallax to right'),
'data' => array(
'type' => 'Flat',
'tiles' => array(
'delay' => 0,
'sequence' =>
'ForwardDiagonal'
),
'main' => array(
'type' => 'both',
'duration' => 1,
'current' => array(
'ease' =>
'easeOutCubic',
'xP' => 50
),
'next' => array(
'ease' =>
'easeOutCubic',
'xP' => -100
)
),
'invert' => array(
'zIndex' => 2,
'current' => array(
'xP' => -100
),
'next' => array(
'xP' => 50
)
)
)
)
));
array_push($animations, array(
"id" => 1002,
'referencekey' => 1200,
"value" => array(
'name' => n2_('Flow - reversed'),
'data' => array(
'type' => 'Flat',
'tiles' => array(
'crop' => false,
'delay' => 0,
'sequence' =>
'ForwardDiagonal'
),
'main' => array(
'type' => 'both',
'duration' => .75,
'current' => array(
'ease' =>
'easeOutCubic',
'scale' => 0.5,
'xP' => 100,
'opacity' => 0
),
'next' => array(
'ease' =>
'easeOutCubic',
'scale' => 0.5,
'xP' => -100
)
),
'invert' => array(
'current' => array(
'xP' => -100
),
'next' => array(
'xP' => 100
)
)
)
)
));
array_push($animations, array(
"id" => 1008,
'referencekey' => 1200,
"value" => array(
'name' => n2_('Slide to right'),
'data' => array(
'type' => 'Flat',
'tiles' => array(
'delay' => 0,
'sequence' =>
'ForwardDiagonal'
),
'main' => array(
'type' => 'both',
'duration' => .8,
'current' => array(
'ease' =>
'easeOutCubic',
'xP' => 100
),
'next' => array(
'ease' =>
'easeOutCubic',
'xP' => -100
)
),
'invert' => array(
'current' => array(
'xP' => -100
),
'next' => array(
'xP' => 100
)
)
)
)
));
array_push($animations, array(
"id" => 1015,
'referencekey' => 1200,
"value" => array(
'name' => n2_('Curtain to right'),
'data' => array(
'type' => 'Flat',
'rows' => 1,
'columns' => 25,
'tiles' => array(
'delay' => .03,
'sequence' => 'ForwardCol'
),
'main' => array(
'type' => 'next',
'duration' => .35,
'next' => array(
'ease' =>
'easeInQuart',
'opacity' => "0",
'xP' => 100
)
),
'invert' => array(
'next' => array(
'xP' => -100
)
),
'invertTiles' => array(
'sequence' => 'BackwardCol'
)
)
)
));
array_push($animations, array(
"id" => 1019,
'referencekey' => 1200,
"value" => array(
'name' => n2_('Blocks to right'),
'data' => array(
'type' => 'Flat',
'rows' => 4,
'columns' => 5,
'tiles' => array(
'delay' => .5,
'sequence' => 'Random'
),
'main' => array(
'type' => 'both',
'duration' => .5,
'current' => array(
'ease' => 'easeInQuart',
'xP' => 100
),
'next' => array(
'ease' => 'easeInQuart',
'xP' => -100
)
),
'invert' => array(
'current' => array(
'ease' => 'easeInQuart',
'xP' => -100
),
'next' => array(
'xP' => 100
)
)
)
)
));
array_push($animations, array(
"id" => 1020,
'referencekey' => 1200,
"value" => array(
'name' => n2_('Slices to right'),
'data' => array(
'type' => 'Flat',
'rows' => 10,
'columns' => 1,
'tiles' => array(
'delay' => .1,
'sequence' => 'ForwardRow'
),
'main' => array(
'type' => 'both',
'duration' => .6,
'current' => array(
'ease' => 'easeInQuart',
'xP' => 100
),
'next' => array(
'ease' => 'easeInQuart',
'xP' => -100
)
),
'invert' => array(
'current' => array(
'ease' => 'easeInQuart',
'xP' => -100
),
'next' => array(
'xP' => 100
)
)
)
)
));
array_push($animations, array(
"id" => 1021,
'referencekey' => 1200,
"value" => array(
'name' => n2_('Reversed slices to
right'),
'data' => array(
'type' => 'Flat',
'rows' => 10,
'columns' => 1,
'tiles' => array(
'delay' => .1,
'sequence' => 'BackwardRow'
),
'main' => array(
'type' => 'both',
'duration' => .6,
'current' => array(
'ease' => 'easeInQuart',
'xP' => 100
),
'next' => array(
'ease' => 'easeInQuart',
'xP' => -100
)
),
'invert' => array(
'current' => array(
'ease' => 'easeInQuart',
'xP' => -100
),
'next' => array(
'xP' => 100
)
)
)
)
));
array_push($animations, array(
"id" => 1102,
'referencekey' => 1200,
"value" => array(
'name' => n2_('Switching to right'),
'data' => array(
'type' => 'Flat',
'tiles' => array(
'crop' => false,
'delay' => 0,
'sequence' =>
'ForwardDiagonal'
),
'main' => array(
'type' => 'both',
'duration' => .8,
'current' => array(
'xP' => 100,
'opacity' => 0
),
'next' => array(
'xP' => -150,
'rotationY' => 90,
'z' => -500,
'opacity' => 0
)
),
'invert' => array(
'current' => array(
'xP' => -100
),
'next' => array(
'xP' => 150,
'rotationY' => -90
)
)
)
)
));
array_push($animations, array(
"id" => 1108,
'referencekey' => 1200,
"value" => array(
'name' => n2_('Page turn to right'),
'data' => array(
'type' => 'Turn',
'direction' => 'right'
)
)
));
array_push($animations, array(
"id" => 1109,
'referencekey' => 1200,
"value" => array(
'name' => n2_('Vertical spin to
right'),
'data' => array(
'type' => 'Cubic',
'depth' => 100,
'main' => array(
'side' => 'Back',
'duration' => 0.8,
'ease' => 'easeInCubic',
'real3D' => true
),
'invert' => array(
'side' => 'BackInvert'
)
)
)
));
array_push($animations, array(
"id" => 1114,
'referencekey' => 1200,
"value" => array(
'name' => n2_('3D bricks to right'),
'data' => array(
'type' => 'Cubic',
'columns' => 4,
'rows' => 3,
'tiles' => array(
'delay' => 0.05,
'sequence' => 'ForwardRow'
),
'main' => array(
'side' => 'Back',
'duration' => 0.6,
'ease' => 'easeInCubic',
'real3D' => true
),
'invert' => array(
'side' => 'BackInvert'
),
'invertTiles' => array(
'sequence' => 'BackwardRow'
),
'pre' => array(
array(
'scale' => 0.9,
'scaleZ' => 0.9,
'duration' => 0.3,
'ease' =>
'easeInCubic'
)
),
'post' => array(
array(
'scale' => 1,
'scaleZ' => 1,
'duration' => 0.3,
'ease' =>
'easeInCubic'
)
)
)
)
));
array_push($animations, array(
"id" => 1118,
'referencekey' => 1200,
"value" => array(
'name' => n2_('3D rows to right'),
'data' => array(
'type' => 'Cubic',
'rows' => 7,
'fullCube' => false,
'depth' => 16,
'tiles' => array(
'delay' => 0.05,
'sequence' => 'ForwardRow'
),
'main' => array(
'side' => 'Back',
'duration' => 1.2,
'ease' => 'easeInBack'
),
'invert' => array(
'side' => 'BackInvert'
),
'invertTiles' => array(
'sequence' => 'BackwardRow'
),
'pre' => array(
array(
'scale' => 0.85,
'scaleZ' => 0.85,
'duration' => 0.6,
'ease' =>
'easeOutBack'
)
),
'post' => array(
array(
'scale' => 1,
'scaleZ' => 1,
'duration' => 0.6,
'ease' =>
'easeOutBack'
)
)
)
)
));
array_push($animations, array(
"id" => 1122,
'referencekey' => 1200,
"value" => array(
'name' => n2_('3D columns to
right'),
'data' => array(
'type' => 'Cubic',
'columns' => 7,
'fullCube' => false,
'depth' => 16,
'tiles' => array(
'delay' => 0.05,
'sequence' => 'ForwardRow'
),
'main' => array(
'side' => 'Back',
'duration' => 1.2,
'ease' => 'easeInBack'
),
'invert' => array(
'side' => 'BackInvert'
),
'invertTiles' => array(
'sequence' => 'BackwardRow'
)
)
)
));
array_push($animations, array(
"id" => 1126,
'referencekey' => 1200,
"value" => array(
'name' => n2_('Spinning cuboid to
right'),
'data' => array(
'type' => 'Cubic',
'columns' => 1,
'rows' => 1,
'main' => array(
'side' => 'Left',
'duration' => 0.8,
'ease' => 'easeInCubic',
'real3D' => true
),
'invert' => array(
'side' => 'Right'
)
)
)
));
array_push($animations, array(
"id" => 1130,
'referencekey' => 1200,
"value" => array(
'name' => n2_('Turning cuboid to
right'),
'data' => array(
'type' => 'Cubic',
'columns' => 1,
'rows' => 1,
'depth' => 'width',
'main' => array(
'side' => 'Back',
'duration' => 1.5,
'ease' => 'easeInCubic',
'real3D' => true
),
'invert' => array(
'side' => 'BackInvert'
)
)
)
));
}
public function postBackgroundAnimationStorage(&$sets,
&$animations) {
array_push($sets, array(
'id' => 1000,
'referencekey' => '',
'value' => n2_('Default')
));
array_push($animations, array(
"id" => 1001,
'referencekey' => 1000,
"value" => array(
'name' => n2_('Downscale'),
'data' => array(
'duration' => 5,
'strength' => array('scale'),
'from' => array(
'scale' => 1.5
),
'to' => array(
'scale' => 1.2
)
)
)
));
array_push($animations, array(
"id" => 1002,
'referencekey' => 1000,
"value" => array(
'name' => n2_('Downscale left'),
'data' => array(
'duration' => 5,
'strength' => array(
'scale',
'x'
),
'from' => array(
'scale' => 1.5,
'x' => 0
),
'to' => array(
'scale' => 1.2,
'x' => -100
)
)
)
));
array_push($animations, array(
"id" => 1003,
'referencekey' => 1000,
"value" => array(
'name' => n2_('Downscale right'),
'data' => array(
'duration' => 5,
'strength' => array(
'scale',
'x'
),
'from' => array(
'scale' => 1.5,
'x' => 0
),
'to' => array(
'scale' => 1.2,
'x' => 100
)
)
)
));
array_push($animations, array(
"id" => 1004,
'referencekey' => 1000,
"value" => array(
'name' => n2_('Downscale top'),
'data' => array(
'duration' => 5,
'strength' => array(
'scale',
'y'
),
'from' => array(
'scale' => 1.5,
'y' => 0
),
'to' => array(
'scale' => 1.2,
'y' => -100
)
)
)
));
array_push($animations, array(
"id" => 1005,
'referencekey' => 1000,
"value" => array(
'name' => n2_('Downscale bottom'),
'data' => array(
'duration' => 5,
'strength' => array(
'scale',
'y'
),
'from' => array(
'scale' => 1.5,
'y' => 0
),
'to' => array(
'scale' => 1.2,
'y' => 100
)
)
)
));
array_push($animations, array(
"id" => 1006,
'referencekey' => 1000,
"value" => array(
'name' => n2_('Upscale'),
'data' => array(
'duration' => 5,
'strength' => array('scale'),
'from' => array(
'scale' => 1.2
),
'to' => array(
'scale' => 1.5
)
)
)
));
array_push($animations, array(
"id" => 1007,
'referencekey' => 1000,
"value" => array(
'name' => n2_('Upscale left'),
'data' => array(
'duration' => 5,
'strength' => array(
'scale',
'x'
),
'from' => array(
'scale' => 1.2,
'x' => 0
),
'to' => array(
'scale' => 1.5,
'x' => 100
)
)
)
));
array_push($animations, array(
"id" => 1008,
'referencekey' => 1000,
"value" => array(
'name' => n2_('Upscale right'),
'data' => array(
'duration' => 5,
'strength' => array(
'scale',
'x'
),
'from' => array(
'scale' => 1.2,
'x' => 0
),
'to' => array(
'scale' => 1.5,
'x' => -100
)
)
)
));
array_push($animations, array(
"id" => 1009,
'referencekey' => 1000,
"value" => array(
'name' => n2_('Upscale top'),
'data' => array(
'duration' => 5,
'strength' => array(
'scale',
'y'
),
'from' => array(
'scale' => 1.2,
'y' => 0
),
'to' => array(
'scale' => 1.5,
'y' => 100
)
)
)
));
array_push($animations, array(
"id" => 1010,
'referencekey' => 1000,
"value" => array(
'name' => n2_('Upscale bottom'),
'data' => array(
'duration' => 5,
'strength' => array(
'scale',
'y'
),
'from' => array(
'scale' => 1.2,
'y' => 0
),
'to' => array(
'scale' => 1.5,
'y' => -100
)
)
)
));
array_push($animations, array(
"id" => 1011,
'referencekey' => 1000,
"value" => array(
'name' => n2_('To left'),
'data' => array(
'duration' => 5,
'strength' => array('x'),
'from' => array(
'scale' => 1.5,
'x' => 0
),
'to' => array(
'scale' => 1.5,
'x' => 100
)
)
)
));
array_push($animations, array(
"id" => 1012,
'referencekey' => 1000,
"value" => array(
'name' => n2_('To right'),
'data' => array(
'duration' => 5,
'strength' => array('x'),
'from' => array(
'scale' => 1.5,
'x' => 0
),
'to' => array(
'scale' => 1.5,
'x' => -100
)
)
)
));
array_push($animations, array(
"id" => 1013,
'referencekey' => 1000,
"value" => array(
'name' => n2_('To top'),
'data' => array(
'duration' => 5,
'strength' => array('y'),
'from' => array(
'scale' => 1.5,
'y' => 0
),
'to' => array(
'scale' => 1.5,
'y' => 100
)
)
)
));
array_push($animations, array(
"id" => 1014,
'referencekey' => 1000,
"value" => array(
'name' => n2_('To bottom'),
'data' => array(
'duration' => 5,
'strength' => array('y'),
'from' => array(
'scale' => 1.5,
'y' => 0
),
'to' => array(
'scale' => 1.5,
'y' => -100
)
)
)
));
array_push($animations, array(
"id" => 1015,
'referencekey' => 1000,
"value" => array(
'name' => n2_('To top left'),
'data' => array(
'duration' => 5,
'strength' => array(
'x',
'y'
),
'from' => array(
'scale' => 1.5,
'x' => 0,
'y' => 0
),
'to' => array(
'scale' => 1.5,
'x' => 100,
'y' => 100
)
)
)
));
array_push($animations, array(
"id" => 1016,
'referencekey' => 1000,
"value" => array(
'name' => n2_('To top right'),
'data' => array(
'duration' => 5,
'strength' => array(
'x',
'y'
),
'from' => array(
'scale' => 1.5,
'x' => 0,
'y' => 0
),
'to' => array(
'scale' => 1.5,
'x' => -100,
'y' => 100
)
)
)
));
array_push($animations, array(
"id" => 1017,
'referencekey' => 1000,
"value" => array(
'name' => n2_('To bottom left'),
'data' => array(
'duration' => 5,
'strength' => array(
'x',
'y'
),
'from' => array(
'scale' => 1.5,
'x' => 0,
'y' => 0
),
'to' => array(
'scale' => 1.5,
'x' => 100,
'y' => -100
)
)
)
));
array_push($animations, array(
"id" => 1018,
'referencekey' => 1000,
"value" => array(
'name' => n2_('To bottom right'),
'data' => array(
'duration' => 5,
'strength' => array(
'x',
'y'
),
'from' => array(
'scale' => 1.5,
'x' => 0,
'y' => 0
),
'to' => array(
'scale' => 1.5,
'x' => -100,
'y' => -100
)
)
)
));
}
public function layoutStorage(&$sets, &$layouts) {
array_push($sets, array(
'id' => 1900,
'referencekey' => '',
'value' => n2_('My layouts')
));
}
public function itemheadingStorage(&$styles) {
array_push($styles, array(
'id' => 1000,
'value' =>
'eyJuYW1lIjoiUmFsZXdheSBCbHVlIENhcHRpb24iLCJkYXRhIjp7ImZvbnQiOnsiZm9udCI6ImV5SnVZVzFsSWpvaVUzUmhkR2xqSWl3aVpHRjBZU0k2VzNzaVpYaDBjbUVpT2lJaUxDSmpiMnh2Y2lJNkltWm1abVptWm1abUlpd2ljMmw2WlNJNklqTTJmSHh3ZUNJc0luUnphR0ZrYjNjaU9pSXdmQ3A4TUh3cWZEQjhLbnd3TURBd01EQm1aaUlzSW1GbWIyNTBJam9pVW1Gc1pYZGhlU3dnUVhKcFlXd2lMQ0pzYVc1bGFHVnBaMmgwSWpvaU1TNDFJaXdpWW05c1pDSTZNQ3dpYVhSaGJHbGpJam93TENKMWJtUmxjbXhwYm1VaU9qQXNJbUZzYVdkdUlqb2lZMlZ1ZEdWeUlpd2liR1YwZEdWeWMzQmhZMmx1WnlJNkltNXZjbTFoYkNJc0luZHZjbVJ6Y0dGamFXNW5Jam9pYm05eWJXRnNJaXdpZEdWNGRIUnlZVzV6Wm05eWJTSTZJbTV2Ym1VaWZTeDdJbVY0ZEhKaElqb2lJbjFkZlE9PSJ9LCJzdHlsZSI6eyJzdHlsZSI6ImV5SnVZVzFsSWpvaVUzUmhkR2xqSWl3aVpHRjBZU0k2VzNzaVpYaDBjbUVpT2lJaUxDSmlZV05yWjNKdmRXNWtZMjlzYjNJaU9pSXdNV0ZrWkRObVppSXNJbkJoWkdScGJtY2lPaUkyZkNwOE1UVjhLbncyZkNwOE1UVjhLbnh3ZUNJc0ltSnZlSE5vWVdSdmR5STZJakI4S253d2ZDcDhNSHdxZkRCOEtud3dNREF3TURCbVppSXNJbUp2Y21SbGNpSTZJakI4S254emIyeHBaSHdxZkdabVptWm1aakF3SWl3aVltOXlaR1Z5Y21Ga2FYVnpJam9pTUNKOUxIc2laWGgwY21FaU9pSWlmVjE5In19fQ=='
));
array_push($styles, array(
'id' => 1001,
'value' =>
'eyJuYW1lIjoiUmFsZXdheSBXaGl0ZSBDYXB0aW9uIiwiZGF0YSI6eyJmb250Ijp7ImZvbnQiOiJleUp1WVcxbElqb2lVM1JoZEdsaklpd2laR0YwWVNJNlczc2laWGgwY21FaU9pSWlMQ0pqYjJ4dmNpSTZJak16TXpNek0yWm1JaXdpYzJsNlpTSTZJak0yZkh4d2VDSXNJblJ6YUdGa2IzY2lPaUl3ZkNwOE1Id3FmREI4S253d01EQXdNREJtWmlJc0ltRm1iMjUwSWpvaVVtRnNaWGRoZVN3Z1FYSnBZV3dpTENKc2FXNWxhR1ZwWjJoMElqb2lNUzQxSWl3aVltOXNaQ0k2TUN3aWFYUmhiR2xqSWpvd0xDSjFibVJsY214cGJtVWlPakFzSW1Gc2FXZHVJam9pWTJWdWRHVnlJaXdpYkdWMGRHVnljM0JoWTJsdVp5STZJbTV2Y20xaGJDSXNJbmR2Y21SemNHRmphVzVuSWpvaWJtOXliV0ZzSWl3aWRHVjRkSFJ5WVc1elptOXliU0k2SW01dmJtVWlmU3g3SW1WNGRISmhJam9pSW4xZGZRPT0ifSwic3R5bGUiOnsic3R5bGUiOiJleUp1WVcxbElqb2lVM1JoZEdsaklpd2laR0YwWVNJNlczc2laWGgwY21FaU9pSWlMQ0ppWVdOclozSnZkVzVrWTI5c2IzSWlPaUptWm1abVptWmpZeUlzSW5CaFpHUnBibWNpT2lJMmZDcDhNVFY4S253MmZDcDhNVFY4S254d2VDSXNJbUp2ZUhOb1lXUnZkeUk2SWpCOEtud3dmQ3A4TUh3cWZEQjhLbnd3TURBd01EQm1aaUlzSW1KdmNtUmxjaUk2SWpCOEtueHpiMnhwWkh3cWZHWm1abVptWmpBd0lpd2lZbTl5WkdWeWNtRmthWFZ6SWpvaU1DSjlMSHNpWlhoMGNtRWlPaUlpZlYxOSJ9fX0='
));
array_push($styles, array(
'id' => 1002,
'value' =>
'eyJuYW1lIjoiUmFsZXdheSBHcmVlbiBDYXB0aW9uIiwiZGF0YSI6eyJmb250Ijp7ImZvbnQiOiJleUp1WVcxbElqb2lVM1JoZEdsaklpd2laR0YwWVNJNlczc2laWGgwY21FaU9pSWlMQ0pqYjJ4dmNpSTZJbVptWm1abVptWm1JaXdpYzJsNlpTSTZJak0yZkh4d2VDSXNJblJ6YUdGa2IzY2lPaUl3ZkNwOE1Id3FmREI4S253d01EQXdNREJtWmlJc0ltRm1iMjUwSWpvaVVtRnNaWGRoZVN3Z1FYSnBZV3dpTENKc2FXNWxhR1ZwWjJoMElqb2lNUzQxSWl3aVltOXNaQ0k2TUN3aWFYUmhiR2xqSWpvd0xDSjFibVJsY214cGJtVWlPakFzSW1Gc2FXZHVJam9pWTJWdWRHVnlJaXdpYkdWMGRHVnljM0JoWTJsdVp5STZJbTV2Y20xaGJDSXNJbmR2Y21SemNHRmphVzVuSWpvaWJtOXliV0ZzSWl3aWRHVjRkSFJ5WVc1elptOXliU0k2SW01dmJtVWlmU3g3SW1WNGRISmhJam9pSW4xZGZRPT0ifSwic3R5bGUiOnsic3R5bGUiOiJleUp1WVcxbElqb2lVM1JoZEdsaklpd2laR0YwWVNJNlczc2laWGgwY21FaU9pSWlMQ0ppWVdOclozSnZkVzVrWTI5c2IzSWlPaUkxWTJKaE0yTm1aaUlzSW5CaFpHUnBibWNpT2lJMmZDcDhNVFY4S253MmZDcDhNVFY4S254d2VDSXNJbUp2ZUhOb1lXUnZkeUk2SWpCOEtud3dmQ3A4TUh3cWZEQjhLbnd3TURBd01EQm1aaUlzSW1KdmNtUmxjaUk2SWpCOEtueHpiMnhwWkh3cWZHWm1abVptWmpBd0lpd2lZbTl5WkdWeWNtRmthWFZ6SWpvaU1DSjlMSHNpWlhoMGNtRWlPaUlpZlYxOSJ9fX0='
));
array_push($styles, array(
'id' => 1003,
'value' =>
'eyJuYW1lIjoiUmFsZXdheSBTdWJoZWFkaW5nIExpZ2h0IiwiZGF0YSI6eyJmb250Ijp7ImZvbnQiOiJleUp1WVcxbElqb2lVM1JoZEdsaklpd2laR0YwWVNJNlczc2laWGgwY21FaU9pSWlMQ0pqYjJ4dmNpSTZJbVptWm1abVpqZ3dJaXdpYzJsNlpTSTZJakkwZkh4d2VDSXNJblJ6YUdGa2IzY2lPaUl3ZkNwOE1Id3FmREI4S253d01EQXdNREJtWmlJc0ltRm1iMjUwSWpvaVVtRnNaWGRoZVN3Z1FYSnBZV3dpTENKc2FXNWxhR1ZwWjJoMElqb2lNUzQxSWl3aVltOXNaQ0k2TUN3aWFYUmhiR2xqSWpvd0xDSjFibVJsY214cGJtVWlPakFzSW1Gc2FXZHVJam9pWTJWdWRHVnlJaXdpYkdWMGRHVnljM0JoWTJsdVp5STZJbTV2Y20xaGJDSXNJbmR2Y21SemNHRmphVzVuSWpvaWJtOXliV0ZzSWl3aWRHVjRkSFJ5WVc1elptOXliU0k2SW01dmJtVWlmU3g3SW1WNGRISmhJam9pSW4xZGZRPT0ifSwic3R5bGUiOnsic3R5bGUiOiIifX19'
));
array_push($styles, array(
'id' => 1004,
'value' =>
'eyJuYW1lIjoiUmFsZXdheSBUaXRsZSBEYXJrIiwiZGF0YSI6eyJmb250Ijp7ImZvbnQiOiJleUp1WVcxbElqb2lVM1JoZEdsaklpd2laR0YwWVNJNlczc2laWGgwY21FaU9pSWlMQ0pqYjJ4dmNpSTZJak16TXpNek0yWm1JaXdpYzJsNlpTSTZJakUxZkh4d2VDSXNJblJ6YUdGa2IzY2lPaUl3ZkNwOE1Id3FmREI4S253d01EQXdNREJtWmlJc0ltRm1iMjUwSWpvaVVtRnNaWGRoZVN3Z1FYSnBZV3dpTENKc2FXNWxhR1ZwWjJoMElqb2lNUzQxSWl3aVltOXNaQ0k2TVN3aWFYUmhiR2xqSWpvd0xDSjFibVJsY214cGJtVWlPakFzSW1Gc2FXZHVJam9pWTJWdWRHVnlJaXdpYkdWMGRHVnljM0JoWTJsdVp5STZJbTV2Y20xaGJDSXNJbmR2Y21SemNHRmphVzVuSWpvaWJtOXliV0ZzSWl3aWRHVjRkSFJ5WVc1elptOXliU0k2SW5Wd2NHVnlZMkZ6WlNKOUxIc2laWGgwY21FaU9pSWlmVjE5In0sInN0eWxlIjp7InN0eWxlIjoiIn19fQ=='
));
array_push($styles, array(
'id' => 1005,
'value' =>
'eyJuYW1lIjoiUmFsZXdheSBUaXRsZSBMaWdodCIsImRhdGEiOnsiZm9udCI6eyJmb250IjoiZXlKdVlXMWxJam9pVTNSaGRHbGpJaXdpWkdGMFlTSTZXM3NpWlhoMGNtRWlPaUlpTENKamIyeHZjaUk2SW1abVptWm1abVptSWl3aWMybDZaU0k2SWpFMWZIeHdlQ0lzSW5SemFHRmtiM2NpT2lJd2ZDcDhNSHdxZkRCOEtud3dNREF3TURCbVppSXNJbUZtYjI1MElqb2lVbUZzWlhkaGVTd2dRWEpwWVd3aUxDSnNhVzVsYUdWcFoyaDBJam9pTVM0MUlpd2lZbTlzWkNJNk1Td2lhWFJoYkdsaklqb3dMQ0oxYm1SbGNteHBibVVpT2pBc0ltRnNhV2R1SWpvaVkyVnVkR1Z5SWl3aWJHVjBkR1Z5YzNCaFkybHVaeUk2SW01dmNtMWhiQ0lzSW5kdmNtUnpjR0ZqYVc1bklqb2libTl5YldGc0lpd2lkR1Y0ZEhSeVlXNXpabTl5YlNJNkluVndjR1Z5WTJGelpTSjlMSHNpWlhoMGNtRWlPaUlpZlYxOSJ9LCJzdHlsZSI6eyJzdHlsZSI6IiJ9fX0='
));
array_push($styles, array(
'id' => 1006,
'value' =>
'eyJuYW1lIjoiUmFsZXdheSBCbGFjayBDYXB0aW9uIiwiZGF0YSI6eyJmb250Ijp7ImZvbnQiOiJleUp1WVcxbElqb2lVM1JoZEdsaklpd2laR0YwWVNJNlczc2laWGgwY21FaU9pSWlMQ0pqYjJ4dmNpSTZJbVptWm1abVptWm1JaXdpYzJsNlpTSTZJak0yZkh4d2VDSXNJblJ6YUdGa2IzY2lPaUl3ZkNwOE1Id3FmREI4S253d01EQXdNREJtWmlJc0ltRm1iMjUwSWpvaVVtRnNaWGRoZVN3Z1FYSnBZV3dpTENKc2FXNWxhR1ZwWjJoMElqb2lNUzQxSWl3aVltOXNaQ0k2TUN3aWFYUmhiR2xqSWpvd0xDSjFibVJsY214cGJtVWlPakFzSW1Gc2FXZHVJam9pWTJWdWRHVnlJaXdpYkdWMGRHVnljM0JoWTJsdVp5STZJbTV2Y20xaGJDSXNJbmR2Y21SemNHRmphVzVuSWpvaWJtOXliV0ZzSWl3aWRHVjRkSFJ5WVc1elptOXliU0k2SW01dmJtVWlmU3g3SW1WNGRISmhJam9pSW4xZGZRPT0ifSwic3R5bGUiOnsic3R5bGUiOiJleUp1WVcxbElqb2lVM1JoZEdsaklpd2laR0YwWVNJNlczc2laWGgwY21FaU9pSWlMQ0ppWVdOclozSnZkVzVrWTI5c2IzSWlPaUl3TURBd01EQmpZeUlzSW5CaFpHUnBibWNpT2lJMmZDcDhNVFY4S253MmZDcDhNVFY4S254d2VDSXNJbUp2ZUhOb1lXUnZkeUk2SWpCOEtud3dmQ3A4TUh3cWZEQjhLbnd3TURBd01EQm1aaUlzSW1KdmNtUmxjaUk2SWpCOEtueHpiMnhwWkh3cWZHWm1abVptWmpBd0lpd2lZbTl5WkdWeWNtRmthWFZ6SWpvaU1DSjlMSHNpWlhoMGNtRWlPaUlpZlYxOSJ9fX0='
));
array_push($styles, array(
'id' => 1007,
'value' =>
'eyJuYW1lIjoiUmFsZXdheSBHaG9zdCBIZWFkaW5nIExpZ2h0IiwiZGF0YSI6eyJmb250Ijp7ImZvbnQiOiJleUp1WVcxbElqb2lVM1JoZEdsaklpd2laR0YwWVNJNlczc2laWGgwY21FaU9pSWlMQ0pqYjJ4dmNpSTZJbVptWm1abVptWm1JaXdpYzJsNlpTSTZJak15Zkh4d2VDSXNJblJ6YUdGa2IzY2lPaUl3ZkNwOE1Id3FmREI4S253d01EQXdNREJtWmlJc0ltRm1iMjUwSWpvaVVtRnNaWGRoZVN3Z1FYSnBZV3dpTENKc2FXNWxhR1ZwWjJoMElqb2lNUzQxSWl3aVltOXNaQ0k2TVN3aWFYUmhiR2xqSWpvd0xDSjFibVJsY214cGJtVWlPakFzSW1Gc2FXZHVJam9pWTJWdWRHVnlJaXdpYkdWMGRHVnljM0JoWTJsdVp5STZJbTV2Y20xaGJDSXNJbmR2Y21SemNHRmphVzVuSWpvaWJtOXliV0ZzSWl3aWRHVjRkSFJ5WVc1elptOXliU0k2SW01dmJtVWlmU3g3SW1WNGRISmhJam9pSW4xZGZRPT0ifSwic3R5bGUiOnsic3R5bGUiOiJleUp1WVcxbElqb2lVM1JoZEdsaklpd2laR0YwWVNJNlczc2laWGgwY21FaU9pSWlMQ0ppWVdOclozSnZkVzVrWTI5c2IzSWlPaUptWm1abVptWXdNQ0lzSW5CaFpHUnBibWNpT2lJMmZDcDhNVFY4S253MmZDcDhNVFY4S254d2VDSXNJbUp2ZUhOb1lXUnZkeUk2SWpCOEtud3dmQ3A4TUh3cWZEQjhLbnd3TURBd01EQm1aaUlzSW1KdmNtUmxjaUk2SWpOOEtueHpiMnhwWkh3cWZHWm1abVptWm1abUlpd2lZbTl5WkdWeWNtRmthWFZ6SWpvaU1DSjlMSHNpWlhoMGNtRWlPaUlpZlYxOSJ9fX0='
));
array_push($styles, array(
'id' => 1008,
'value' =>
'eyJuYW1lIjoiUmFsZXdheSBHaG9zdCBIZWFkaW5nIERhcmsiLCJkYXRhIjp7ImZvbnQiOnsiZm9udCI6ImV5SnVZVzFsSWpvaVUzUmhkR2xqSWl3aVpHRjBZU0k2VzNzaVpYaDBjbUVpT2lJaUxDSmpiMnh2Y2lJNklqTXpNek16TTJabUlpd2ljMmw2WlNJNklqTXlmSHh3ZUNJc0luUnphR0ZrYjNjaU9pSXdmQ3A4TUh3cWZEQjhLbnd3TURBd01EQm1aaUlzSW1GbWIyNTBJam9pVW1Gc1pYZGhlU3dnUVhKcFlXd2lMQ0pzYVc1bGFHVnBaMmgwSWpvaU1TNDFJaXdpWW05c1pDSTZNU3dpYVhSaGJHbGpJam93TENKMWJtUmxjbXhwYm1VaU9qQXNJbUZzYVdkdUlqb2lZMlZ1ZEdWeUlpd2liR1YwZEdWeWMzQmhZMmx1WnlJNkltNXZjbTFoYkNJc0luZHZjbVJ6Y0dGamFXNW5Jam9pYm05eWJXRnNJaXdpZEdWNGRIUnlZVzV6Wm05eWJTSTZJbTV2Ym1VaWZTeDdJbVY0ZEhKaElqb2lJbjFkZlE9PSJ9LCJzdHlsZSI6eyJzdHlsZSI6ImV5SnVZVzFsSWpvaVUzUmhkR2xqSWl3aVpHRjBZU0k2VzNzaVpYaDBjbUVpT2lJaUxDSmlZV05yWjNKdmRXNWtZMjlzYjNJaU9pSm1abVptWm1Zd01DSXNJbkJoWkdScGJtY2lPaUkyZkNwOE1UVjhLbncyZkNwOE1UVjhLbnh3ZUNJc0ltSnZlSE5vWVdSdmR5STZJakI4S253d2ZDcDhNSHdxZkRCOEtud3dNREF3TURCbVppSXNJbUp2Y21SbGNpSTZJak44S254emIyeHBaSHdxZkRNek16TXpNMlptSWl3aVltOXlaR1Z5Y21Ga2FYVnpJam9pTUNKOUxIc2laWGgwY21FaU9pSWlmVjE5In19fQ=='
));
array_push($styles, array(
'id' => 1009,
'value' =>
'eyJuYW1lIjoiUmFsZXdheSBIZWFkaW5nIExpZ2h0IiwiZGF0YSI6eyJmb250Ijp7ImZvbnQiOiJleUp1WVcxbElqb2lVM1JoZEdsaklpd2laR0YwWVNJNlczc2laWGgwY21FaU9pSWlMQ0pqYjJ4dmNpSTZJbVptWm1abVptWm1JaXdpYzJsNlpTSTZJalE0Zkh4d2VDSXNJblJ6YUdGa2IzY2lPaUl3ZkNwOE1Id3FmREI4S253d01EQXdNREJtWmlJc0ltRm1iMjUwSWpvaVVtRnNaWGRoZVN3Z1FYSnBZV3dpTENKc2FXNWxhR1ZwWjJoMElqb2lNUzQxSWl3aVltOXNaQ0k2TUN3aWFYUmhiR2xqSWpvd0xDSjFibVJsY214cGJtVWlPakFzSW1Gc2FXZHVJam9pWTJWdWRHVnlJaXdpYkdWMGRHVnljM0JoWTJsdVp5STZJbTV2Y20xaGJDSXNJbmR2Y21SemNHRmphVzVuSWpvaWJtOXliV0ZzSWl3aWRHVjRkSFJ5WVc1elptOXliU0k2SW01dmJtVWlmU3g3SW1WNGRISmhJam9pSWl3aVkyOXNiM0lpT2lKbVptWm1abVptWmlKOVhYMD0ifSwic3R5bGUiOnsic3R5bGUiOiIifX19'
));
array_push($styles, array(
'id' => 1010,
'value' =>
'eyJuYW1lIjoiUmFsZXdheSBTdWJoZWFkaW5nIERhcmsiLCJkYXRhIjp7ImZvbnQiOnsiZm9udCI6ImV5SnVZVzFsSWpvaVUzUmhkR2xqSWl3aVpHRjBZU0k2VzNzaVpYaDBjbUVpT2lJaUxDSmpiMnh2Y2lJNklqZGtOMlEzWkdabUlpd2ljMmw2WlNJNklqSTBmSHh3ZUNJc0luUnphR0ZrYjNjaU9pSXdmQ3A4TUh3cWZEQjhLbnd3TURBd01EQm1aaUlzSW1GbWIyNTBJam9pVW1Gc1pYZGhlU3dnUVhKcFlXd2lMQ0pzYVc1bGFHVnBaMmgwSWpvaU1TNDFJaXdpWW05c1pDSTZNQ3dpYVhSaGJHbGpJam93TENKMWJtUmxjbXhwYm1VaU9qQXNJbUZzYVdkdUlqb2lZMlZ1ZEdWeUlpd2liR1YwZEdWeWMzQmhZMmx1WnlJNkltNXZjbTFoYkNJc0luZHZjbVJ6Y0dGamFXNW5Jam9pYm05eWJXRnNJaXdpZEdWNGRIUnlZVzV6Wm05eWJTSTZJbTV2Ym1VaWZTeDdJbVY0ZEhKaElqb2lJaXdpWTI5c2IzSWlPaUkzWkRka04yUm1aaUo5WFgwPSJ9LCJzdHlsZSI6eyJzdHlsZSI6IiJ9fX0='
));
array_push($styles, array(
'id' => 1011,
'value' =>
'eyJuYW1lIjoiUmFsZXdheSBIZWFkaW5nIERhcmsiLCJkYXRhIjp7ImZvbnQiOnsiZm9udCI6ImV5SnVZVzFsSWpvaVUzUmhkR2xqSWl3aVpHRjBZU0k2VzNzaVpYaDBjbUVpT2lJaUxDSmpiMnh2Y2lJNklqTXpNek16TTJabUlpd2ljMmw2WlNJNklqUTRmSHh3ZUNJc0luUnphR0ZrYjNjaU9pSXdmQ3A4TUh3cWZEQjhLbnd3TURBd01EQm1aaUlzSW1GbWIyNTBJam9pVW1Gc1pYZGhlU3dnUVhKcFlXd2lMQ0pzYVc1bGFHVnBaMmgwSWpvaU1TNDFJaXdpWW05c1pDSTZNQ3dpYVhSaGJHbGpJam93TENKMWJtUmxjbXhwYm1VaU9qQXNJbUZzYVdkdUlqb2lZMlZ1ZEdWeUlpd2liR1YwZEdWeWMzQmhZMmx1WnlJNkltNXZjbTFoYkNJc0luZHZjbVJ6Y0dGamFXNW5Jam9pYm05eWJXRnNJaXdpZEdWNGRIUnlZVzV6Wm05eWJTSTZJbTV2Ym1VaWZTeDdJbVY0ZEhKaElqb2lJaXdpWTI5c2IzSWlPaUl6TXpNek16Tm1aaUo5WFgwPSJ9LCJzdHlsZSI6eyJzdHlsZSI6IiJ9fX0='
));
array_push($styles, array(
'id' => 1012,
'value' =>
'eyJuYW1lIjoiUmFsZXdheSBQdXJwbGUgQ2FwdGlvbiIsImRhdGEiOnsiZm9udCI6eyJmb250IjoiZXlKdVlXMWxJam9pVTNSaGRHbGpJaXdpWkdGMFlTSTZXM3NpWlhoMGNtRWlPaUlpTENKamIyeHZjaUk2SW1abVptWm1abVptSWl3aWMybDZaU0k2SWpNMmZIeHdlQ0lzSW5SemFHRmtiM2NpT2lJd2ZDcDhNSHdxZkRCOEtud3dNREF3TURCbVppSXNJbUZtYjI1MElqb2lVbUZzWlhkaGVTd2dRWEpwWVd3aUxDSnNhVzVsYUdWcFoyaDBJam9pTVM0MUlpd2lZbTlzWkNJNk1Dd2lhWFJoYkdsaklqb3dMQ0oxYm1SbGNteHBibVVpT2pBc0ltRnNhV2R1SWpvaVkyVnVkR1Z5SWl3aWJHVjBkR1Z5YzNCaFkybHVaeUk2SW01dmNtMWhiQ0lzSW5kdmNtUnpjR0ZqYVc1bklqb2libTl5YldGc0lpd2lkR1Y0ZEhSeVlXNXpabTl5YlNJNkltNXZibVVpZlN4N0ltVjRkSEpoSWpvaUluMWRmUT09In0sInN0eWxlIjp7InN0eWxlIjoiZXlKdVlXMWxJam9pVTNSaGRHbGpJaXdpWkdGMFlTSTZXM3NpWlhoMGNtRWlPaUlpTENKaVlXTnJaM0p2ZFc1a1kyOXNiM0lpT2lJNE56VTNZakptWmlJc0luQmhaR1JwYm1jaU9pSTJmQ3A4TVRWOEtudzJmQ3A4TVRWOEtueHdlQ0lzSW1KdmVITm9ZV1J2ZHlJNklqQjhLbnd3ZkNwOE1Id3FmREI4S253d01EQXdNREJtWmlJc0ltSnZjbVJsY2lJNklqQjhLbnh6YjJ4cFpId3FmR1ptWm1abVpqQXdJaXdpWW05eVpHVnljbUZrYVhWeklqb2lNQ0o5TEhzaVpYaDBjbUVpT2lJaWZWMTkifX19'
));
array_push($styles, array(
'id' => 1013,
'value' =>
'eyJuYW1lIjoiUGxheWZhaXIgSGVhZGluZyBEYXJrIiwiZGF0YSI6eyJmb250Ijp7ImZvbnQiOiJleUp1WVcxbElqb2lVM1JoZEdsaklpd2laR0YwWVNJNlczc2laWGgwY21FaU9pSWlMQ0pqYjJ4dmNpSTZJak16TXpNek0yWm1JaXdpYzJsNlpTSTZJalE0Zkh4d2VDSXNJblJ6YUdGa2IzY2lPaUl3ZkNwOE1Id3FmREI4S253d01EQXdNREJtWmlJc0ltRm1iMjUwSWpvaUoxQnNZWGxtWVdseUlFUnBjM0JzWVhrbkxDQkJjbWxoYkNJc0lteHBibVZvWldsbmFIUWlPaUl4TGpVaUxDSmliMnhrSWpvd0xDSnBkR0ZzYVdNaU9qQXNJblZ1WkdWeWJHbHVaU0k2TUN3aVlXeHBaMjRpT2lKalpXNTBaWElpTENKc1pYUjBaWEp6Y0dGamFXNW5Jam9pYm05eWJXRnNJaXdpZDI5eVpITndZV05wYm1jaU9pSnViM0p0WVd3aUxDSjBaWGgwZEhKaGJuTm1iM0p0SWpvaWJtOXVaU0o5TEhzaVpYaDBjbUVpT2lJaWZWMTkifSwic3R5bGUiOnsic3R5bGUiOiIifX19'
));
array_push($styles, array(
'id' => 1014,
'value' =>
'eyJuYW1lIjoiUGxheWZhaXIgSGVhZGluZyBMaWdodCIsImRhdGEiOnsiZm9udCI6eyJmb250IjoiZXlKdVlXMWxJam9pVTNSaGRHbGpJaXdpWkdGMFlTSTZXM3NpWlhoMGNtRWlPaUlpTENKamIyeHZjaUk2SW1abVptWm1abVptSWl3aWMybDZaU0k2SWpRNGZIeHdlQ0lzSW5SemFHRmtiM2NpT2lJd2ZDcDhNSHdxZkRCOEtud3dNREF3TURCbVppSXNJbUZtYjI1MElqb2lKMUJzWVhsbVlXbHlJRVJwYzNCc1lYa25MQ0JCY21saGJDSXNJbXhwYm1Wb1pXbG5hSFFpT2lJeExqVWlMQ0ppYjJ4a0lqb3dMQ0pwZEdGc2FXTWlPakFzSW5WdVpHVnliR2x1WlNJNk1Dd2lZV3hwWjI0aU9pSmpaVzUwWlhJaUxDSnNaWFIwWlhKemNHRmphVzVuSWpvaWJtOXliV0ZzSWl3aWQyOXlaSE53WVdOcGJtY2lPaUp1YjNKdFlXd2lMQ0owWlhoMGRISmhibk5tYjNKdElqb2libTl1WlNKOUxIc2laWGgwY21FaU9pSWlmVjE5In0sInN0eWxlIjp7InN0eWxlIjoiIn19fQ=='
));
array_push($styles, array(
'id' => 1015,
'value' =>
'eyJuYW1lIjoiUGxheWZhaXIgU3ViaGVhZGluZyBEYXJrIiwiZGF0YSI6eyJmb250Ijp7ImZvbnQiOiJleUp1WVcxbElqb2lVM1JoZEdsaklpd2laR0YwWVNJNlczc2laWGgwY21FaU9pSWlMQ0pqYjJ4dmNpSTZJak16TXpNek0yWm1JaXdpYzJsNlpTSTZJakkwZkh4d2VDSXNJblJ6YUdGa2IzY2lPaUl3ZkNwOE1Id3FmREI4S253d01EQXdNREJtWmlJc0ltRm1iMjUwSWpvaUoxQnNZWGxtWVdseUlFUnBjM0JzWVhrbkxDQkJjbWxoYkNJc0lteHBibVZvWldsbmFIUWlPaUl4TGpVaUxDSmliMnhrSWpveExDSnBkR0ZzYVdNaU9qQXNJblZ1WkdWeWJHbHVaU0k2TUN3aVlXeHBaMjRpT2lKalpXNTBaWElpTENKc1pYUjBaWEp6Y0dGamFXNW5Jam9pYm05eWJXRnNJaXdpZDI5eVpITndZV05wYm1jaU9pSnViM0p0WVd3aUxDSjBaWGgwZEhKaGJuTm1iM0p0SWpvaWRYQndaWEpqWVhObEluMHNleUpsZUhSeVlTSTZJaUo5WFgwPSJ9LCJzdHlsZSI6eyJzdHlsZSI6IiJ9fX0='
));
array_push($styles, array(
'id' => 1016,
'value' =>
'eyJuYW1lIjoiUGxheWZhaXIgU3ViaGVhZGluZyBMaWdodCIsImRhdGEiOnsiZm9udCI6eyJmb250IjoiZXlKdVlXMWxJam9pVTNSaGRHbGpJaXdpWkdGMFlTSTZXM3NpWlhoMGNtRWlPaUlpTENKamIyeHZjaUk2SW1abVptWm1abVptSWl3aWMybDZaU0k2SWpJMGZIeHdlQ0lzSW5SemFHRmtiM2NpT2lJd2ZDcDhNSHdxZkRCOEtud3dNREF3TURCbVppSXNJbUZtYjI1MElqb2lKMUJzWVhsbVlXbHlJRVJwYzNCc1lYa25MQ0JCY21saGJDSXNJbXhwYm1Wb1pXbG5hSFFpT2lJeExqVWlMQ0ppYjJ4a0lqb3hMQ0pwZEdGc2FXTWlPakFzSW5WdVpHVnliR2x1WlNJNk1Dd2lZV3hwWjI0aU9pSmpaVzUwWlhJaUxDSnNaWFIwWlhKemNHRmphVzVuSWpvaWJtOXliV0ZzSWl3aWQyOXlaSE53WVdOcGJtY2lPaUp1YjNKdFlXd2lMQ0owWlhoMGRISmhibk5tYjNKdElqb2lkWEJ3WlhKallYTmxJbjBzZXlKbGVIUnlZU0k2SWlKOVhYMD0ifSwic3R5bGUiOnsic3R5bGUiOiIifX19'
));
array_push($styles, array(
'id' => 1017,
'value' =>
'eyJuYW1lIjoiUGxheWZhaXIgSHVnZSBEYXJrIiwiZGF0YSI6eyJmb250Ijp7ImZvbnQiOiJleUp1WVcxbElqb2lVM1JoZEdsaklpd2laR0YwWVNJNlczc2laWGgwY21FaU9pSWlMQ0pqYjJ4dmNpSTZJak16TXpNek0yWm1JaXdpYzJsNlpTSTZJamsyZkh4d2VDSXNJblJ6YUdGa2IzY2lPaUl3ZkNwOE1Id3FmREI4S253d01EQXdNREJtWmlJc0ltRm1iMjUwSWpvaUoxQnNZWGxtWVdseUlFUnBjM0JzWVhrbkxDQkJjbWxoYkNJc0lteHBibVZvWldsbmFIUWlPaUl4TGpVaUxDSmliMnhrSWpveExDSnBkR0ZzYVdNaU9qQXNJblZ1WkdWeWJHbHVaU0k2TUN3aVlXeHBaMjRpT2lKalpXNTBaWElpTENKc1pYUjBaWEp6Y0dGamFXNW5Jam9pYm05eWJXRnNJaXdpZDI5eVpITndZV05wYm1jaU9pSnViM0p0WVd3aUxDSjBaWGgwZEhKaGJuTm1iM0p0SWpvaWJtOXVaU0o5TEhzaVpYaDBjbUVpT2lJaWZWMTkifSwic3R5bGUiOnsic3R5bGUiOiIifX19'
));
array_push($styles, array(
'id' => 1018,
'value' =>
'eyJuYW1lIjoiUGxheWZhaXIgSHVnZSBMaWdodCIsImRhdGEiOnsiZm9udCI6eyJmb250IjoiZXlKdVlXMWxJam9pVTNSaGRHbGpJaXdpWkdGMFlTSTZXM3NpWlhoMGNtRWlPaUlpTENKamIyeHZjaUk2SW1abVptWm1abVptSWl3aWMybDZaU0k2SWprMmZIeHdlQ0lzSW5SemFHRmtiM2NpT2lJd2ZDcDhNSHdxZkRCOEtud3dNREF3TURCbVppSXNJbUZtYjI1MElqb2lKMUJzWVhsbVlXbHlJRVJwYzNCc1lYa25MQ0JCY21saGJDSXNJbXhwYm1Wb1pXbG5hSFFpT2lJeExqVWlMQ0ppYjJ4a0lqb3hMQ0pwZEdGc2FXTWlPakFzSW5WdVpHVnliR2x1WlNJNk1Dd2lZV3hwWjI0aU9pSmpaVzUwWlhJaUxDSnNaWFIwWlhKemNHRmphVzVuSWpvaWJtOXliV0ZzSWl3aWQyOXlaSE53WVdOcGJtY2lPaUp1YjNKdFlXd2lMQ0owWlhoMGRISmhibk5tYjNKdElqb2libTl1WlNKOUxIc2laWGgwY21FaU9pSWlmVjE5In0sInN0eWxlIjp7InN0eWxlIjoiIn19fQ=='
));
array_push($styles, array(
'id' => 1019,
'value' =>
'eyJuYW1lIjoiUGxheWZhaXIgQ2FwdGlvbiBEYXJrIiwiZGF0YSI6eyJmb250Ijp7ImZvbnQiOiJleUp1WVcxbElqb2lVM1JoZEdsaklpd2laR0YwWVNJNlczc2laWGgwY21FaU9pSWlMQ0pqYjJ4dmNpSTZJbVptWm1abVptWm1JaXdpYzJsNlpTSTZJalE0Zkh4d2VDSXNJblJ6YUdGa2IzY2lPaUl3ZkNwOE1Id3FmREI4S253d01EQXdNREJtWmlJc0ltRm1iMjUwSWpvaUoxQnNZWGxtWVdseUlFUnBjM0JzWVhrbkxDQkJjbWxoYkNJc0lteHBibVZvWldsbmFIUWlPaUl4TGpVaUxDSmliMnhrSWpveExDSnBkR0ZzYVdNaU9qQXNJblZ1WkdWeWJHbHVaU0k2TUN3aVlXeHBaMjRpT2lKalpXNTBaWElpTENKc1pYUjBaWEp6Y0dGamFXNW5Jam9pYm05eWJXRnNJaXdpZDI5eVpITndZV05wYm1jaU9pSnViM0p0WVd3aUxDSjBaWGgwZEhKaGJuTm1iM0p0SWpvaWJtOXVaU0o5TEhzaVpYaDBjbUVpT2lJaWZWMTkifSwic3R5bGUiOnsic3R5bGUiOiJleUp1WVcxbElqb2lVM1JoZEdsaklpd2laR0YwWVNJNlczc2laWGgwY21FaU9pSWlMQ0ppWVdOclozSnZkVzVrWTI5c2IzSWlPaUl3TURBd01EQmpZeUlzSW5CaFpHUnBibWNpT2lJNGZDcDhNakI4S253NGZDcDhNakI4S254d2VDSXNJbUp2ZUhOb1lXUnZkeUk2SWpCOEtud3dmQ3A4TUh3cWZEQjhLbnd3TURBd01EQm1aaUlzSW1KdmNtUmxjaUk2SWpCOEtueHpiMnhwWkh3cWZEQXdNREF3TUdabUlpd2lZbTl5WkdWeWNtRmthWFZ6SWpvaU1DSjlMSHNpWlhoMGNtRWlPaUlpZlYxOSJ9fX0='
));
array_push($styles, array(
'id' => 1020,
'value' =>
'eyJuYW1lIjoiUGxheWZhaXIgQ2FwdGlvbiBMaWdodCIsImRhdGEiOnsiZm9udCI6eyJmb250IjoiZXlKdVlXMWxJam9pVTNSaGRHbGpJaXdpWkdGMFlTSTZXM3NpWlhoMGNtRWlPaUlpTENKamIyeHZjaUk2SWpNek16TXpNMlptSWl3aWMybDZaU0k2SWpRNGZIeHdlQ0lzSW5SemFHRmtiM2NpT2lJd2ZDcDhNSHdxZkRCOEtud3dNREF3TURCbVppSXNJbUZtYjI1MElqb2lKMUJzWVhsbVlXbHlJRVJwYzNCc1lYa25MQ0JCY21saGJDSXNJbXhwYm1Wb1pXbG5hSFFpT2lJeExqVWlMQ0ppYjJ4a0lqb3hMQ0pwZEdGc2FXTWlPakFzSW5WdVpHVnliR2x1WlNJNk1Dd2lZV3hwWjI0aU9pSmpaVzUwWlhJaUxDSnNaWFIwWlhKemNHRmphVzVuSWpvaWJtOXliV0ZzSWl3aWQyOXlaSE53WVdOcGJtY2lPaUp1YjNKdFlXd2lMQ0owWlhoMGRISmhibk5tYjNKdElqb2libTl1WlNKOUxIc2laWGgwY21FaU9pSWlmVjE5In0sInN0eWxlIjp7InN0eWxlIjoiZXlKdVlXMWxJam9pVTNSaGRHbGpJaXdpWkdGMFlTSTZXM3NpWlhoMGNtRWlPaUlpTENKaVlXTnJaM0p2ZFc1a1kyOXNiM0lpT2lKbVptWm1abVpqWXlJc0luQmhaR1JwYm1jaU9pSTRmQ3A4TWpCOEtudzRmQ3A4TWpCOEtueHdlQ0lzSW1KdmVITm9ZV1J2ZHlJNklqQjhLbnd3ZkNwOE1Id3FmREI4S253d01EQXdNREJtWmlJc0ltSnZjbVJsY2lJNklqQjhLbnh6YjJ4cFpId3FmREF3TURBd01EQXdJaXdpWW05eVpHVnljbUZrYVhWeklqb2lNQ0o5TEhzaVpYaDBjbUVpT2lJaWZWMTkifX19'
));
array_push($styles, array(
'id' => 1021,
'value' =>
'eyJuYW1lIjoiTW9udHNlcnJhdCBIZWFkaW5nIERhcmsiLCJkYXRhIjp7ImZvbnQiOnsiZm9udCI6ImV5SnVZVzFsSWpvaVUzUmhkR2xqSWl3aVpHRjBZU0k2VzNzaVpYaDBjbUVpT2lJaUxDSmpiMnh2Y2lJNklqTXpNek16TTJabUlpd2ljMmw2WlNJNklqUTRmSHh3ZUNJc0luUnphR0ZrYjNjaU9pSXdmQ3A4TUh3cWZEQjhLbnd3TURBd01EQm1aaUlzSW1GbWIyNTBJam9pVFc5dWRITmxjbkpoZEN3Z1FYSnBZV3dpTENKc2FXNWxhR1ZwWjJoMElqb2lNUzQxSWl3aVltOXNaQ0k2TUN3aWFYUmhiR2xqSWpvd0xDSjFibVJsY214cGJtVWlPakFzSW1Gc2FXZHVJam9pWTJWdWRHVnlJaXdpYkdWMGRHVnljM0JoWTJsdVp5STZJbTV2Y20xaGJDSXNJbmR2Y21SemNHRmphVzVuSWpvaWJtOXliV0ZzSWl3aWRHVjRkSFJ5WVc1elptOXliU0k2SW01dmJtVWlmU3g3SW1WNGRISmhJam9pSW4xZGZRPT0ifSwic3R5bGUiOnsic3R5bGUiOiIifX19'
));
array_push($styles, array(
'id' => 1022,
'value' =>
'eyJuYW1lIjoiTW9udHNlcnJhdCBIZWFkaW5nIExpZ2h0IiwiZGF0YSI6eyJmb250Ijp7ImZvbnQiOiJleUp1WVcxbElqb2lVM1JoZEdsaklpd2laR0YwWVNJNlczc2laWGgwY21FaU9pSWlMQ0pqYjJ4dmNpSTZJbVptWm1abVptWm1JaXdpYzJsNlpTSTZJalE0Zkh4d2VDSXNJblJ6YUdGa2IzY2lPaUl3ZkNwOE1Id3FmREI4S253d01EQXdNREJtWmlJc0ltRm1iMjUwSWpvaVRXOXVkSE5sY25KaGRDd2dRWEpwWVd3aUxDSnNhVzVsYUdWcFoyaDBJam9pTVM0MUlpd2lZbTlzWkNJNk1Dd2lhWFJoYkdsaklqb3dMQ0oxYm1SbGNteHBibVVpT2pBc0ltRnNhV2R1SWpvaVkyVnVkR1Z5SWl3aWJHVjBkR1Z5YzNCaFkybHVaeUk2SW01dmNtMWhiQ0lzSW5kdmNtUnpjR0ZqYVc1bklqb2libTl5YldGc0lpd2lkR1Y0ZEhSeVlXNXpabTl5YlNJNkltNXZibVVpZlN4N0ltVjRkSEpoSWpvaUluMWRmUT09In0sInN0eWxlIjp7InN0eWxlIjoiIn19fQ=='
));
array_push($styles, array(
'id' => 1023,
'value' =>
'eyJuYW1lIjoiTW9udHNlcnJhdCBTdWJoZWFkaW5nIERhcmsiLCJkYXRhIjp7ImZvbnQiOnsiZm9udCI6ImV5SnVZVzFsSWpvaVUzUmhkR2xqSWl3aVpHRjBZU0k2VzNzaVpYaDBjbUVpT2lJaUxDSmpiMnh2Y2lJNklqTXpNek16TTJabUlpd2ljMmw2WlNJNklqSTBmSHh3ZUNJc0luUnphR0ZrYjNjaU9pSXdmQ3A4TUh3cWZEQjhLbnd3TURBd01EQm1aaUlzSW1GbWIyNTBJam9pVFc5dWRITmxjbkpoZEN3Z1FYSnBZV3dpTENKc2FXNWxhR1ZwWjJoMElqb2lNUzQxSWl3aVltOXNaQ0k2TUN3aWFYUmhiR2xqSWpvd0xDSjFibVJsY214cGJtVWlPakFzSW1Gc2FXZHVJam9pWTJWdWRHVnlJaXdpYkdWMGRHVnljM0JoWTJsdVp5STZJbTV2Y20xaGJDSXNJbmR2Y21SemNHRmphVzVuSWpvaWJtOXliV0ZzSWl3aWRHVjRkSFJ5WVc1elptOXliU0k2SW01dmJtVWlmU3g3SW1WNGRISmhJam9pSW4xZGZRPT0ifSwic3R5bGUiOnsic3R5bGUiOiIifX19'
));
array_push($styles, array(
'id' => 1024,
'value' =>
'eyJuYW1lIjoiTW9udHNlcnJhdCBTdWJoZWFkaW5nIExpZ2h0IiwiZGF0YSI6eyJmb250Ijp7ImZvbnQiOiJleUp1WVcxbElqb2lVM1JoZEdsaklpd2laR0YwWVNJNlczc2laWGgwY21FaU9pSWlMQ0pqYjJ4dmNpSTZJbVptWm1abVptWm1JaXdpYzJsNlpTSTZJakkwZkh4d2VDSXNJblJ6YUdGa2IzY2lPaUl3ZkNwOE1Id3FmREI4S253d01EQXdNREJtWmlJc0ltRm1iMjUwSWpvaVRXOXVkSE5sY25KaGRDd2dRWEpwWVd3aUxDSnNhVzVsYUdWcFoyaDBJam9pTVM0MUlpd2lZbTlzWkNJNk1Dd2lhWFJoYkdsaklqb3dMQ0oxYm1SbGNteHBibVVpT2pBc0ltRnNhV2R1SWpvaVkyVnVkR1Z5SWl3aWJHVjBkR1Z5YzNCaFkybHVaeUk2SW01dmNtMWhiQ0lzSW5kdmNtUnpjR0ZqYVc1bklqb2libTl5YldGc0lpd2lkR1Y0ZEhSeVlXNXpabTl5YlNJNkltNXZibVVpZlN4N0ltVjRkSEpoSWpvaUluMWRmUT09In0sInN0eWxlIjp7InN0eWxlIjoiIn19fQ=='
));
array_push($styles, array(
'id' => 1025,
'value' =>
'eyJuYW1lIjoiTW9udHNlcnJhdCBIdWdlIERhcmsiLCJkYXRhIjp7ImZvbnQiOnsiZm9udCI6ImV5SnVZVzFsSWpvaVUzUmhkR2xqSWl3aVpHRjBZU0k2VzNzaVpYaDBjbUVpT2lJaUxDSmpiMnh2Y2lJNklqTXpNek16TTJabUlpd2ljMmw2WlNJNklqUTRmSHh3ZUNJc0luUnphR0ZrYjNjaU9pSXdmQ3A4TUh3cWZEQjhLbnd3TURBd01EQm1aaUlzSW1GbWIyNTBJam9pVFc5dWRITmxjbkpoZEN3Z1FYSnBZV3dpTENKc2FXNWxhR1ZwWjJoMElqb2lNUzQxSWl3aVltOXNaQ0k2TVN3aWFYUmhiR2xqSWpvd0xDSjFibVJsY214cGJtVWlPakFzSW1Gc2FXZHVJam9pWTJWdWRHVnlJaXdpYkdWMGRHVnljM0JoWTJsdVp5STZJbTV2Y20xaGJDSXNJbmR2Y21SemNHRmphVzVuSWpvaWJtOXliV0ZzSWl3aWRHVjRkSFJ5WVc1elptOXliU0k2SW5Wd2NHVnlZMkZ6WlNKOUxIc2laWGgwY21FaU9pSWlmVjE5In0sInN0eWxlIjp7InN0eWxlIjoiIn19fQ=='
));
array_push($styles, array(
'id' => 1026,
'value' =>
'eyJuYW1lIjoiTW9udHNlcnJhdCBIdWdlIExpZ2h0IiwiZGF0YSI6eyJmb250Ijp7ImZvbnQiOiJleUp1WVcxbElqb2lVM1JoZEdsaklpd2laR0YwWVNJNlczc2laWGgwY21FaU9pSWlMQ0pqYjJ4dmNpSTZJbVptWm1abVptWm1JaXdpYzJsNlpTSTZJalE0Zkh4d2VDSXNJblJ6YUdGa2IzY2lPaUl3ZkNwOE1Id3FmREI4S253d01EQXdNREJtWmlJc0ltRm1iMjUwSWpvaVRXOXVkSE5sY25KaGRDd2dRWEpwWVd3aUxDSnNhVzVsYUdWcFoyaDBJam9pTVM0MUlpd2lZbTlzWkNJNk1Td2lhWFJoYkdsaklqb3dMQ0oxYm1SbGNteHBibVVpT2pBc0ltRnNhV2R1SWpvaVkyVnVkR1Z5SWl3aWJHVjBkR1Z5YzNCaFkybHVaeUk2SW01dmNtMWhiQ0lzSW5kdmNtUnpjR0ZqYVc1bklqb2libTl5YldGc0lpd2lkR1Y0ZEhSeVlXNXpabTl5YlNJNkluVndjR1Z5WTJGelpTSjlMSHNpWlhoMGNtRWlPaUlpZlYxOSJ9LCJzdHlsZSI6eyJzdHlsZSI6IiJ9fX0='
));
array_push($styles, array(
'id' => 1027,
'value' =>
'eyJuYW1lIjoiTW9udHNlcnJhdCBCbGFjayBDYXB0aW9uIiwiZGF0YSI6eyJmb250Ijp7ImZvbnQiOiJleUp1WVcxbElqb2lVM1JoZEdsaklpd2laR0YwWVNJNlczc2laWGgwY21FaU9pSWlMQ0pqYjJ4dmNpSTZJbVptWm1abVptWm1JaXdpYzJsNlpTSTZJalE0Zkh4d2VDSXNJblJ6YUdGa2IzY2lPaUl3ZkNwOE1Id3FmREI4S253d01EQXdNREJtWmlJc0ltRm1iMjUwSWpvaVRXOXVkSE5sY25KaGRDd2dRWEpwWVd3aUxDSnNhVzVsYUdWcFoyaDBJam9pTVM0MUlpd2lZbTlzWkNJNk1Dd2lhWFJoYkdsaklqb3dMQ0oxYm1SbGNteHBibVVpT2pBc0ltRnNhV2R1SWpvaVkyVnVkR1Z5SWl3aWJHVjBkR1Z5YzNCaFkybHVaeUk2SW01dmNtMWhiQ0lzSW5kdmNtUnpjR0ZqYVc1bklqb2libTl5YldGc0lpd2lkR1Y0ZEhSeVlXNXpabTl5YlNJNkltNXZibVVpZlN4N0ltVjRkSEpoSWpvaUluMWRmUT09In0sInN0eWxlIjp7InN0eWxlIjoiZXlKdVlXMWxJam9pVTNSaGRHbGpJaXdpWkdGMFlTSTZXM3NpWlhoMGNtRWlPaUlpTENKaVlXTnJaM0p2ZFc1a1kyOXNiM0lpT2lJd01EQXdNREJqWXlJc0luQmhaR1JwYm1jaU9pSTJmQ3A4TWpCOEtudzJmQ3A4TWpCOEtueHdlQ0lzSW1KdmVITm9ZV1J2ZHlJNklqQjhLbnd3ZkNwOE1Id3FmREI4S253d01EQXdNREJtWmlJc0ltSnZjbVJsY2lJNklqQjhLbnh6YjJ4cFpId3FmREF3TURBd01EQXdJaXdpWW05eVpHVnljbUZrYVhWeklqb2lNQ0o5TEhzaVpYaDBjbUVpT2lJaWZWMTkifX19'
));
array_push($styles, array(
'id' => 1028,
'value' =>
'eyJuYW1lIjoiTW9udHNlcnJhdCBXaGl0ZSBDYXB0aW9uIiwiZGF0YSI6eyJmb250Ijp7ImZvbnQiOiJleUp1WVcxbElqb2lVM1JoZEdsaklpd2laR0YwWVNJNlczc2laWGgwY21FaU9pSWlMQ0pqYjJ4dmNpSTZJak16TXpNek0yWm1JaXdpYzJsNlpTSTZJalE0Zkh4d2VDSXNJblJ6YUdGa2IzY2lPaUl3ZkNwOE1Id3FmREI4S253d01EQXdNREJtWmlJc0ltRm1iMjUwSWpvaVRXOXVkSE5sY25KaGRDd2dRWEpwWVd3aUxDSnNhVzVsYUdWcFoyaDBJam9pTVM0MUlpd2lZbTlzWkNJNk1Dd2lhWFJoYkdsaklqb3dMQ0oxYm1SbGNteHBibVVpT2pBc0ltRnNhV2R1SWpvaVkyVnVkR1Z5SWl3aWJHVjBkR1Z5YzNCaFkybHVaeUk2SW01dmNtMWhiQ0lzSW5kdmNtUnpjR0ZqYVc1bklqb2libTl5YldGc0lpd2lkR1Y0ZEhSeVlXNXpabTl5YlNJNkltNXZibVVpZlN4N0ltVjRkSEpoSWpvaUluMWRmUT09In0sInN0eWxlIjp7InN0eWxlIjoiZXlKdVlXMWxJam9pVTNSaGRHbGpJaXdpWkdGMFlTSTZXM3NpWlhoMGNtRWlPaUlpTENKaVlXTnJaM0p2ZFc1a1kyOXNiM0lpT2lKbVptWm1abVpqWXlJc0luQmhaR1JwYm1jaU9pSTJmQ3A4TWpCOEtudzJmQ3A4TWpCOEtueHdlQ0lzSW1KdmVITm9ZV1J2ZHlJNklqQjhLbnd3ZkNwOE1Id3FmREI4S253d01EQXdNREJtWmlJc0ltSnZjbVJsY2lJNklqQjhLbnh6YjJ4cFpId3FmREF3TURBd01EQXdJaXdpWW05eVpHVnljbUZrYVhWeklqb2lNQ0o5TEhzaVpYaDBjbUVpT2lJaWZWMTkifX19'
));
}
public function itembuttonStorage(&$styles) {
array_push($styles, array(
'id' => 1001,
'value' =>
'eyJuYW1lIjoiUmVjdGFuZ2xlIFJhbGV3YXkgR3JlZW4iLCJkYXRhIjp7ImZvbnQiOnsiZm9udCI6ImV5SnVZVzFsSWpvaVUzUmhkR2xqSWl3aVpHRjBZU0k2VzNzaVpYaDBjbUVpT2lJaUxDSmpiMnh2Y2lJNkltWm1abVptWm1abUlpd2ljMmw2WlNJNklqRTBmSHh3ZUNJc0luUnphR0ZrYjNjaU9pSXdmQ3A4TUh3cWZEQjhLbnd3TURBd01EQm1aaUlzSW1GbWIyNTBJam9pVW1Gc1pYZGhlU3dnUVhKcFlXd2lMQ0pzYVc1bGFHVnBaMmgwSWpvaU1TNDFJaXdpWW05c1pDSTZNU3dpYVhSaGJHbGpJam93TENKMWJtUmxjbXhwYm1VaU9qQXNJbUZzYVdkdUlqb2lZMlZ1ZEdWeUlpd2liR1YwZEdWeWMzQmhZMmx1WnlJNkltNXZjbTFoYkNJc0luZHZjbVJ6Y0dGamFXNW5Jam9pYm05eWJXRnNJaXdpZEdWNGRIUnlZVzV6Wm05eWJTSTZJbTV2Ym1VaWZTeDdJbVY0ZEhKaElqb2lJbjFkZlE9PSJ9LCJzdHlsZSI6eyJzdHlsZSI6ImV5SnVZVzFsSWpvaVUzUmhkR2xqSWl3aVpHRjBZU0k2VzNzaVpYaDBjbUVpT2lJaUxDSmlZV05yWjNKdmRXNWtZMjlzYjNJaU9pSTFZMkpoTTJObVppSXNJbkJoWkdScGJtY2lPaUl4TUh3cWZETXdmQ3A4TVRCOEtud3pNSHdxZkhCNElpd2lZbTk0YzJoaFpHOTNJam9pTUh3cWZEQjhLbnd3ZkNwOE1Id3FmREF3TURBd01HWm1JaXdpWW05eVpHVnlJam9pTUh3cWZITnZiR2xrZkNwOE1EQXdNREF3Wm1ZaUxDSmliM0prWlhKeVlXUnBkWE1pT2lJd0luMHNleUpsZUhSeVlTSTZJaUlzSW1KaFkydG5jbTkxYm1SamIyeHZjaUk2SWpVeVlUY3pObVptSW4xZGZRPT0ifX19'
));
array_push($styles, array(
'id' => 1002,
'value' =>
'eyJuYW1lIjoiUmVjdGFuZ2xlIFJhbGV3YXkgQmx1ZSIsImRhdGEiOnsiZm9udCI6eyJmb250IjoiZXlKdVlXMWxJam9pVTNSaGRHbGpJaXdpWkdGMFlTSTZXM3NpWlhoMGNtRWlPaUlpTENKamIyeHZjaUk2SW1abVptWm1abVptSWl3aWMybDZaU0k2SWpFMGZIeHdlQ0lzSW5SemFHRmtiM2NpT2lJd2ZDcDhNSHdxZkRCOEtud3dNREF3TURCbVppSXNJbUZtYjI1MElqb2lVbUZzWlhkaGVTd2dRWEpwWVd3aUxDSnNhVzVsYUdWcFoyaDBJam9pTVM0MUlpd2lZbTlzWkNJNk1Td2lhWFJoYkdsaklqb3dMQ0oxYm1SbGNteHBibVVpT2pBc0ltRnNhV2R1SWpvaVkyVnVkR1Z5SWl3aWJHVjBkR1Z5YzNCaFkybHVaeUk2SW01dmNtMWhiQ0lzSW5kdmNtUnpjR0ZqYVc1bklqb2libTl5YldGc0lpd2lkR1Y0ZEhSeVlXNXpabTl5YlNJNkltNXZibVVpZlN4N0ltVjRkSEpoSWpvaUluMWRmUT09In0sInN0eWxlIjp7InN0eWxlIjoiZXlKdVlXMWxJam9pVTNSaGRHbGpJaXdpWkdGMFlTSTZXM3NpWlhoMGNtRWlPaUlpTENKaVlXTnJaM0p2ZFc1a1kyOXNiM0lpT2lJd01XRmtaRE5tWmlJc0luQmhaR1JwYm1jaU9pSXhNSHdxZkRNd2ZDcDhNVEI4S253ek1Id3FmSEI0SWl3aVltOTRjMmhoWkc5M0lqb2lNSHdxZkRCOEtud3dmQ3A4TUh3cWZEQXdNREF3TUdabUlpd2lZbTl5WkdWeUlqb2lNSHdxZkhOdmJHbGtmQ3A4TURBd01EQXdabVlpTENKaWIzSmtaWEp5WVdScGRYTWlPaUl3SW4wc2V5SmxlSFJ5WVNJNklpSXNJbUpoWTJ0bmNtOTFibVJqYjJ4dmNpSTZJakF4T1dKaVpHWm1JbjFkZlE9PSJ9fX0='
));
array_push($styles, array(
'id' => 1003,
'value' =>
'eyJuYW1lIjoiUmVjdGFuZ2xlIFJhbGV3YXkgUHVycGxlIiwiZGF0YSI6eyJmb250Ijp7ImZvbnQiOiJleUp1WVcxbElqb2lVM1JoZEdsaklpd2laR0YwWVNJNlczc2laWGgwY21FaU9pSWlMQ0pqYjJ4dmNpSTZJbVptWm1abVptWm1JaXdpYzJsNlpTSTZJakUwZkh4d2VDSXNJblJ6YUdGa2IzY2lPaUl3ZkNwOE1Id3FmREI4S253d01EQXdNREJtWmlJc0ltRm1iMjUwSWpvaVVtRnNaWGRoZVN3Z1FYSnBZV3dpTENKc2FXNWxhR1ZwWjJoMElqb2lNUzQxSWl3aVltOXNaQ0k2TVN3aWFYUmhiR2xqSWpvd0xDSjFibVJsY214cGJtVWlPakFzSW1Gc2FXZHVJam9pWTJWdWRHVnlJaXdpYkdWMGRHVnljM0JoWTJsdVp5STZJbTV2Y20xaGJDSXNJbmR2Y21SemNHRmphVzVuSWpvaWJtOXliV0ZzSWl3aWRHVjRkSFJ5WVc1elptOXliU0k2SW01dmJtVWlmU3g3SW1WNGRISmhJam9pSW4xZGZRPT0ifSwic3R5bGUiOnsic3R5bGUiOiJleUp1WVcxbElqb2lVM1JoZEdsaklpd2laR0YwWVNJNlczc2laWGgwY21FaU9pSWlMQ0ppWVdOclozSnZkVzVrWTI5c2IzSWlPaUk0TnpVM1lqSm1aaUlzSW5CaFpHUnBibWNpT2lJeE1Id3FmRE13ZkNwOE1UQjhLbnd6TUh3cWZIQjRJaXdpWW05NGMyaGhaRzkzSWpvaU1Id3FmREI4S253d2ZDcDhNSHdxZkRBd01EQXdNR1ptSWl3aVltOXlaR1Z5SWpvaU1Id3FmSE52Ykdsa2ZDcDhNREF3TURBd1ptWWlMQ0ppYjNKa1pYSnlZV1JwZFhNaU9pSXdJbjBzZXlKbGVIUnlZU0k2SWlJc0ltSmhZMnRuY205MWJtUmpiMnh2Y2lJNklqYzVOR1ZoTUdabUluMWRmUT09In19fQ=='
));
array_push($styles, array(
'id' => 1004,
'value' =>
'eyJuYW1lIjoiUGlsbCBSYWxld2F5IEdob3N0IE9yYW5nZSIsImRhdGEiOnsiZm9udCI6eyJmb250IjoiZXlKdVlXMWxJam9pVTNSaGRHbGpJaXdpWkdGMFlTSTZXM3NpWlhoMGNtRWlPaUlpTENKamIyeHZjaUk2SW1Vd05HVXhaV1ptSWl3aWMybDZaU0k2SWpFMGZIeHdlQ0lzSW5SemFHRmtiM2NpT2lJd2ZDcDhNSHdxZkRCOEtud3dNREF3TURCbVppSXNJbUZtYjI1MElqb2lVbUZzWlhkaGVTd2dRWEpwWVd3aUxDSnNhVzVsYUdWcFoyaDBJam9pTVM0MUlpd2lZbTlzWkNJNk1Dd2lhWFJoYkdsaklqb3dMQ0oxYm1SbGNteHBibVVpT2pBc0ltRnNhV2R1SWpvaVkyVnVkR1Z5SWl3aWJHVjBkR1Z5YzNCaFkybHVaeUk2SW01dmNtMWhiQ0lzSW5kdmNtUnpjR0ZqYVc1bklqb2libTl5YldGc0lpd2lkR1Y0ZEhSeVlXNXpabTl5YlNJNkltNXZibVVpZlN4N0ltVjRkSEpoSWpvaUlpd2lZMjlzYjNJaU9pSm1abVptWm1abVppSjlYWDA9In0sInN0eWxlIjp7InN0eWxlIjoiZXlKdVlXMWxJam9pVTNSaGRHbGpJaXdpWkdGMFlTSTZXM3NpWlhoMGNtRWlPaUlpTENKaVlXTnJaM0p2ZFc1a1kyOXNiM0lpT2lJd01EQXdNREF3TUNJc0luQmhaR1JwYm1jaU9pSXhNSHdxZkRNd2ZDcDhNVEI4S253ek1Id3FmSEI0SWl3aVltOTRjMmhoWkc5M0lqb2lNSHdxZkRCOEtud3dmQ3A4TUh3cWZEQXdNREF3TUdabUlpd2lZbTl5WkdWeUlqb2lNWHdxZkhOdmJHbGtmQ3A4WlRBMFpURmxabVlpTENKaWIzSmtaWEp5WVdScGRYTWlPaUk1T1NKOUxIc2laWGgwY21FaU9pSWlMQ0ppWVdOclozSnZkVzVrWTI5c2IzSWlPaUpsTURSbE1XVm1aaUo5WFgwPSJ9fX0='
));
array_push($styles, array(
'id' => 1005,
'value' =>
'eyJuYW1lIjoiUGlsbCBSYWxld2F5IE9yYW5nZSBJbnZlcnNlIiwiZGF0YSI6eyJmb250Ijp7ImZvbnQiOiJleUp1WVcxbElqb2lVM1JoZEdsaklpd2laR0YwWVNJNlczc2laWGgwY21FaU9pSWlMQ0pqYjJ4dmNpSTZJbVV3TkdVeFpXWm1JaXdpYzJsNlpTSTZJakUwZkh4d2VDSXNJblJ6YUdGa2IzY2lPaUl3ZkNwOE1Id3FmREI4S253d01EQXdNREJtWmlJc0ltRm1iMjUwSWpvaVVtRnNaWGRoZVN3Z1FYSnBZV3dpTENKc2FXNWxhR1ZwWjJoMElqb2lNUzQxSWl3aVltOXNaQ0k2TUN3aWFYUmhiR2xqSWpvd0xDSjFibVJsY214cGJtVWlPakFzSW1Gc2FXZHVJam9pWTJWdWRHVnlJaXdpYkdWMGRHVnljM0JoWTJsdVp5STZJbTV2Y20xaGJDSXNJbmR2Y21SemNHRmphVzVuSWpvaWJtOXliV0ZzSWl3aWRHVjRkSFJ5WVc1elptOXliU0k2SW01dmJtVWlmU3g3SW1WNGRISmhJam9pSWl3aVkyOXNiM0lpT2lKbE1EUmxNV1ZtWmlKOVhYMD0ifSwic3R5bGUiOnsic3R5bGUiOiJleUp1WVcxbElqb2lVM1JoZEdsaklpd2laR0YwWVNJNlczc2laWGgwY21FaU9pSWlMQ0ppWVdOclozSnZkVzVrWTI5c2IzSWlPaUl3TURBd01EQXdNQ0lzSW5CaFpHUnBibWNpT2lJeE1Id3FmRE13ZkNwOE1UQjhLbnd6TUh3cWZIQjRJaXdpWW05NGMyaGhaRzkzSWpvaU1Id3FmREI4S253d2ZDcDhNSHdxZkRBd01EQXdNR1ptSWl3aVltOXlaR1Z5SWpvaU1Yd3FmSE52Ykdsa2ZDcDhaVEEwWlRGbFptWWlMQ0ppYjNKa1pYSnlZV1JwZFhNaU9pSTVPU0o5TEhzaVpYaDBjbUVpT2lJaUxDSmlZV05yWjNKdmRXNWtZMjlzYjNJaU9pSm1abVptWm1abVppSXNJbUp2Y21SbGNpSTZJakY4S254emIyeHBaSHdxZkdabVptWm1abVptSW4xZGZRPT0ifX19'
));
array_push($styles, array(
'id' => 1006,
'value' =>
'eyJuYW1lIjoiUm91bmRlZCBNb250c2VycmF0IEdyZWVuIiwiZGF0YSI6eyJmb250Ijp7ImZvbnQiOiJleUp1WVcxbElqb2lVM1JoZEdsaklpd2laR0YwWVNJNlczc2laWGgwY21FaU9pSWlMQ0pqYjJ4dmNpSTZJbVptWm1abVptWm1JaXdpYzJsNlpTSTZJakUwZkh4d2VDSXNJblJ6YUdGa2IzY2lPaUl3ZkNwOE1Id3FmREI4S253d01EQXdNREJtWmlJc0ltRm1iMjUwSWpvaVRXOXVkSE5sY25KaGRDd2dRWEpwWVd3aUxDSnNhVzVsYUdWcFoyaDBJam9pTVM0MUlpd2lZbTlzWkNJNk1Dd2lhWFJoYkdsaklqb3dMQ0oxYm1SbGNteHBibVVpT2pBc0ltRnNhV2R1SWpvaVkyVnVkR1Z5SWl3aWJHVjBkR1Z5YzNCaFkybHVaeUk2SW01dmNtMWhiQ0lzSW5kdmNtUnpjR0ZqYVc1bklqb2libTl5YldGc0lpd2lkR1Y0ZEhSeVlXNXpabTl5YlNJNkltNXZibVVpZlN4N0ltVjRkSEpoSWpvaUluMWRmUT09In0sInN0eWxlIjp7InN0eWxlIjoiZXlKdVlXMWxJam9pVTNSaGRHbGpJaXdpWkdGMFlTSTZXM3NpWlhoMGNtRWlPaUlpTENKaVlXTnJaM0p2ZFc1a1kyOXNiM0lpT2lJMVkySmhNMk5tWmlJc0luQmhaR1JwYm1jaU9pSXhNSHdxZkRJd2ZDcDhNVEI4S253eU1Id3FmSEI0SWl3aVltOTRjMmhoWkc5M0lqb2lNSHdxZkRCOEtud3dmQ3A4TUh3cWZEQXdNREF3TUdabUlpd2lZbTl5WkdWeUlqb2lNSHdxZkhOdmJHbGtmQ3A4TURBd01EQXdabVlpTENKaWIzSmtaWEp5WVdScGRYTWlPaUkxSW4wc2V5SmxlSFJ5WVNJNklpSXNJbUpoWTJ0bmNtOTFibVJqYjJ4dmNpSTZJalV5WVRjek5tWm1JaXdpWW05eVpHVnljbUZrYVhWeklqb2lOU0lzSW1KdmNtUmxjaUk2SWpCOEtueHpiMnhwWkh3cWZHWm1abVptWm1abUluMWRmUT09In19fQ=='
));
array_push($styles, array(
'id' => 1007,
'value' =>
'eyJuYW1lIjoiUm91bmRlZCBNb250c2VycmF0IEJsdWUiLCJkYXRhIjp7ImZvbnQiOnsiZm9udCI6ImV5SnVZVzFsSWpvaVUzUmhkR2xqSWl3aVpHRjBZU0k2VzNzaVpYaDBjbUVpT2lJaUxDSmpiMnh2Y2lJNkltWm1abVptWm1abUlpd2ljMmw2WlNJNklqRTBmSHh3ZUNJc0luUnphR0ZrYjNjaU9pSXdmQ3A4TUh3cWZEQjhLbnd3TURBd01EQm1aaUlzSW1GbWIyNTBJam9pVFc5dWRITmxjbkpoZEN3Z1FYSnBZV3dpTENKc2FXNWxhR1ZwWjJoMElqb2lNUzQxSWl3aVltOXNaQ0k2TUN3aWFYUmhiR2xqSWpvd0xDSjFibVJsY214cGJtVWlPakFzSW1Gc2FXZHVJam9pWTJWdWRHVnlJaXdpYkdWMGRHVnljM0JoWTJsdVp5STZJbTV2Y20xaGJDSXNJbmR2Y21SemNHRmphVzVuSWpvaWJtOXliV0ZzSWl3aWRHVjRkSFJ5WVc1elptOXliU0k2SW01dmJtVWlmU3g3SW1WNGRISmhJam9pSW4xZGZRPT0ifSwic3R5bGUiOnsic3R5bGUiOiJleUp1WVcxbElqb2lVM1JoZEdsaklpd2laR0YwWVNJNlczc2laWGgwY21FaU9pSWlMQ0ppWVdOclozSnZkVzVrWTI5c2IzSWlPaUl3TVdGa1pETm1aaUlzSW5CaFpHUnBibWNpT2lJeE1Id3FmREl3ZkNwOE1UQjhLbnd5TUh3cWZIQjRJaXdpWW05NGMyaGhaRzkzSWpvaU1Id3FmREI4S253d2ZDcDhNSHdxZkRBd01EQXdNR1ptSWl3aVltOXlaR1Z5SWpvaU1Id3FmSE52Ykdsa2ZDcDhNREF3TURBd1ptWWlMQ0ppYjNKa1pYSnlZV1JwZFhNaU9pSTFJbjBzZXlKbGVIUnlZU0k2SWlJc0ltSmhZMnRuY205MWJtUmpiMnh2Y2lJNklqQXhPV0ppWkdabUlpd2lZbTl5WkdWeWNtRmthWFZ6SWpvaU5TSXNJbUp2Y21SbGNpSTZJakI4S254emIyeHBaSHdxZkdabVptWm1abVptSW4xZGZRPT0ifX19'
));
array_push($styles, array(
'id' => 1008,
'value' =>
'eyJuYW1lIjoiUm91bmRlZCBNb250c2VycmF0IFB1cnBsZSIsImRhdGEiOnsiZm9udCI6eyJmb250IjoiZXlKdVlXMWxJam9pVTNSaGRHbGpJaXdpWkdGMFlTSTZXM3NpWlhoMGNtRWlPaUlpTENKamIyeHZjaUk2SW1abVptWm1abVptSWl3aWMybDZaU0k2SWpFMGZIeHdlQ0lzSW5SemFHRmtiM2NpT2lJd2ZDcDhNSHdxZkRCOEtud3dNREF3TURCbVppSXNJbUZtYjI1MElqb2lUVzl1ZEhObGNuSmhkQ3dnUVhKcFlXd2lMQ0pzYVc1bGFHVnBaMmgwSWpvaU1TNDFJaXdpWW05c1pDSTZNQ3dpYVhSaGJHbGpJam93TENKMWJtUmxjbXhwYm1VaU9qQXNJbUZzYVdkdUlqb2lZMlZ1ZEdWeUlpd2liR1YwZEdWeWMzQmhZMmx1WnlJNkltNXZjbTFoYkNJc0luZHZjbVJ6Y0dGamFXNW5Jam9pYm05eWJXRnNJaXdpZEdWNGRIUnlZVzV6Wm05eWJTSTZJbTV2Ym1VaWZTeDdJbVY0ZEhKaElqb2lJbjFkZlE9PSJ9LCJzdHlsZSI6eyJzdHlsZSI6ImV5SnVZVzFsSWpvaVUzUmhkR2xqSWl3aVpHRjBZU0k2VzNzaVpYaDBjbUVpT2lJaUxDSmlZV05yWjNKdmRXNWtZMjlzYjNJaU9pSTROelUzWWpKbVppSXNJbkJoWkdScGJtY2lPaUl4TUh3cWZESXdmQ3A4TVRCOEtud3lNSHdxZkhCNElpd2lZbTk0YzJoaFpHOTNJam9pTUh3cWZEQjhLbnd3ZkNwOE1Id3FmREF3TURBd01HWm1JaXdpWW05eVpHVnlJam9pTUh3cWZITnZiR2xrZkNwOE1EQXdNREF3Wm1ZaUxDSmliM0prWlhKeVlXUnBkWE1pT2lJMUluMHNleUpsZUhSeVlTSTZJaUlzSW1KaFkydG5jbTkxYm1SamIyeHZjaUk2SWpjNU5HVmhNR1ptSWl3aVltOXlaR1Z5Y21Ga2FYVnpJam9pTlNJc0ltSnZjbVJsY2lJNklqQjhLbnh6YjJ4cFpId3FmR1ptWm1abVptWm1JbjFkZlE9PSJ9fX0='
));
array_push($styles, array(
'id' => 1009,
'value' =>
'eyJuYW1lIjoiUGlsbCBNb250c2VycmF0IEdob3N0IE9yYW5nZSIsImRhdGEiOnsiZm9udCI6eyJmb250IjoiZXlKdVlXMWxJam9pVTNSaGRHbGpJaXdpWkdGMFlTSTZXM3NpWlhoMGNtRWlPaUlpTENKamIyeHZjaUk2SW1Vd05HVXhaV1ptSWl3aWMybDZaU0k2SWpFMGZIeHdlQ0lzSW5SemFHRmtiM2NpT2lJd2ZDcDhNSHdxZkRCOEtud3dNREF3TURCbVppSXNJbUZtYjI1MElqb2lUVzl1ZEhObGNuSmhkQ3dnUVhKcFlXd2lMQ0pzYVc1bGFHVnBaMmgwSWpvaU1TNDFJaXdpWW05c1pDSTZNQ3dpYVhSaGJHbGpJam93TENKMWJtUmxjbXhwYm1VaU9qQXNJbUZzYVdkdUlqb2lZMlZ1ZEdWeUlpd2liR1YwZEdWeWMzQmhZMmx1WnlJNkltNXZjbTFoYkNJc0luZHZjbVJ6Y0dGamFXNW5Jam9pYm05eWJXRnNJaXdpZEdWNGRIUnlZVzV6Wm05eWJTSTZJbTV2Ym1VaWZTeDdJbVY0ZEhKaElqb2lJaXdpWTI5c2IzSWlPaUpsTURSbE1XVm1aaUo5WFgwPSJ9LCJzdHlsZSI6eyJzdHlsZSI6ImV5SnVZVzFsSWpvaVUzUmhkR2xqSWl3aVpHRjBZU0k2VzNzaVpYaDBjbUVpT2lJaUxDSmlZV05yWjNKdmRXNWtZMjlzYjNJaU9pSXdNREF3TURBd01DSXNJbkJoWkdScGJtY2lPaUl4Tlh3cWZETXdmQ3A4TVRWOEtud3pNSHdxZkhCNElpd2lZbTk0YzJoaFpHOTNJam9pTUh3cWZEQjhLbnd3ZkNwOE1Id3FmREF3TURBd01HWm1JaXdpWW05eVpHVnlJam9pTW53cWZITnZiR2xrZkNwOFpUQTBaVEZsWm1ZaUxDSmliM0prWlhKeVlXUnBkWE1pT2lJNU9TSjlMSHNpWlhoMGNtRWlPaUlpTENKaVlXTnJaM0p2ZFc1a1kyOXNiM0lpT2lKbVptWm1abVptWmlJc0ltSnZjbVJsY2lJNklqSjhLbnh6YjJ4cFpId3FmR1ptWm1abVptWm1JbjFkZlE9PSJ9fX0='
));
array_push($styles, array(
'id' => 1010,
'value' =>
'eyJuYW1lIjoiUGlsbCBNb250c2VycmF0IEdob3N0IFdoaXRlIiwiZGF0YSI6eyJmb250Ijp7ImZvbnQiOiJleUp1WVcxbElqb2lVM1JoZEdsaklpd2laR0YwWVNJNlczc2laWGgwY21FaU9pSWlMQ0pqYjJ4dmNpSTZJbVptWm1abVptWm1JaXdpYzJsNlpTSTZJakUwZkh4d2VDSXNJblJ6YUdGa2IzY2lPaUl3ZkNwOE1Id3FmREI4S253d01EQXdNREJtWmlJc0ltRm1iMjUwSWpvaVRXOXVkSE5sY25KaGRDd2dRWEpwWVd3aUxDSnNhVzVsYUdWcFoyaDBJam9pTVM0MUlpd2lZbTlzWkNJNk1Dd2lhWFJoYkdsaklqb3dMQ0oxYm1SbGNteHBibVVpT2pBc0ltRnNhV2R1SWpvaVkyVnVkR1Z5SWl3aWJHVjBkR1Z5YzNCaFkybHVaeUk2SW01dmNtMWhiQ0lzSW5kdmNtUnpjR0ZqYVc1bklqb2libTl5YldGc0lpd2lkR1Y0ZEhSeVlXNXpabTl5YlNJNkltNXZibVVpZlN4N0ltVjRkSEpoSWpvaUlpd2lZMjlzYjNJaU9pSXpNek16TXpObVppSjlYWDA9In0sInN0eWxlIjp7InN0eWxlIjoiZXlKdVlXMWxJam9pVTNSaGRHbGpJaXdpWkdGMFlTSTZXM3NpWlhoMGNtRWlPaUlpTENKaVlXTnJaM0p2ZFc1a1kyOXNiM0lpT2lJd01EQXdNREF3TUNJc0luQmhaR1JwYm1jaU9pSXhOWHdxZkRNd2ZDcDhNVFY4S253ek1Id3FmSEI0SWl3aVltOTRjMmhoWkc5M0lqb2lNSHdxZkRCOEtud3dmQ3A4TUh3cWZEQXdNREF3TUdabUlpd2lZbTl5WkdWeUlqb2lNbndxZkhOdmJHbGtmQ3A4Wm1abVptWm1abVlpTENKaWIzSmtaWEp5WVdScGRYTWlPaUk1T1NKOUxIc2laWGgwY21FaU9pSWlMQ0ppWVdOclozSnZkVzVrWTI5c2IzSWlPaUptWm1abVptWm1aaUlzSW1KdmNtUmxjaUk2SWpKOEtueHpiMnhwWkh3cWZHWm1abVptWm1abUluMWRmUT09In19fQ=='
));
array_push($styles, array(
'id' => 1011,
'value' =>
'eyJuYW1lIjoiUGlsbCBNb250c2VycmF0IEdob3N0IERhcmsiLCJkYXRhIjp7ImZvbnQiOnsiZm9udCI6ImV5SnVZVzFsSWpvaVUzUmhkR2xqSWl3aVpHRjBZU0k2VzNzaVpYaDBjbUVpT2lJaUxDSmpiMnh2Y2lJNklqTXpNek16TTJabUlpd2ljMmw2WlNJNklqRTBmSHh3ZUNJc0luUnphR0ZrYjNjaU9pSXdmQ3A4TUh3cWZEQjhLbnd3TURBd01EQm1aaUlzSW1GbWIyNTBJam9pVFc5dWRITmxjbkpoZEN3Z1FYSnBZV3dpTENKc2FXNWxhR1ZwWjJoMElqb2lNUzQxSWl3aVltOXNaQ0k2TUN3aWFYUmhiR2xqSWpvd0xDSjFibVJsY214cGJtVWlPakFzSW1Gc2FXZHVJam9pWTJWdWRHVnlJaXdpYkdWMGRHVnljM0JoWTJsdVp5STZJbTV2Y20xaGJDSXNJbmR2Y21SemNHRmphVzVuSWpvaWJtOXliV0ZzSWl3aWRHVjRkSFJ5WVc1elptOXliU0k2SW01dmJtVWlmU3g3SW1WNGRISmhJam9pSWl3aVkyOXNiM0lpT2lKbVptWm1abVptWmlKOVhYMD0ifSwic3R5bGUiOnsic3R5bGUiOiJleUp1WVcxbElqb2lVM1JoZEdsaklpd2laR0YwWVNJNlczc2laWGgwY21FaU9pSWlMQ0ppWVdOclozSnZkVzVrWTI5c2IzSWlPaUl3TURBd01EQXdNQ0lzSW5CaFpHUnBibWNpT2lJeE5Yd3FmRE13ZkNwOE1UVjhLbnd6TUh3cWZIQjRJaXdpWW05NGMyaGhaRzkzSWpvaU1Id3FmREI4S253d2ZDcDhNSHdxZkRBd01EQXdNR1ptSWl3aVltOXlaR1Z5SWpvaU1ud3FmSE52Ykdsa2ZDcDhNek16TXpNelptWWlMQ0ppYjNKa1pYSnlZV1JwZFhNaU9pSTVPU0o5TEhzaVpYaDBjbUVpT2lJaUxDSmlZV05yWjNKdmRXNWtZMjlzYjNJaU9pSXpNek16TXpObVppSXNJbUp2Y21SbGNpSTZJako4S254emIyeHBaSHdxZkRNek16TXpNMlptSW4xZGZRPT0ifX19'
));
array_push($styles, array(
'id' => 1012,
'value' =>
'eyJuYW1lIjoiUGlsbCBNb250c2VycmF0IEdyZWVuIiwiZGF0YSI6eyJmb250Ijp7ImZvbnQiOiJleUp1WVcxbElqb2lVM1JoZEdsaklpd2laR0YwWVNJNlczc2laWGgwY21FaU9pSWlMQ0pqYjJ4dmNpSTZJbVptWm1abVptWm1JaXdpYzJsNlpTSTZJakUwZkh4d2VDSXNJblJ6YUdGa2IzY2lPaUl3ZkNwOE1Id3FmREI4S253d01EQXdNREJtWmlJc0ltRm1iMjUwSWpvaVRXOXVkSE5sY25KaGRDd2dRWEpwWVd3aUxDSnNhVzVsYUdWcFoyaDBJam9pTVM0MUlpd2lZbTlzWkNJNk1Dd2lhWFJoYkdsaklqb3dMQ0oxYm1SbGNteHBibVVpT2pBc0ltRnNhV2R1SWpvaVkyVnVkR1Z5SWl3aWJHVjBkR1Z5YzNCaFkybHVaeUk2SW01dmNtMWhiQ0lzSW5kdmNtUnpjR0ZqYVc1bklqb2libTl5YldGc0lpd2lkR1Y0ZEhSeVlXNXpabTl5YlNJNkltNXZibVVpZlN4N0ltVjRkSEpoSWpvaUlpd2lZMjlzYjNJaU9pSm1abVptWm1abVppSjlYWDA9In0sInN0eWxlIjp7InN0eWxlIjoiZXlKdVlXMWxJam9pVTNSaGRHbGpJaXdpWkdGMFlTSTZXM3NpWlhoMGNtRWlPaUlpTENKaVlXTnJaM0p2ZFc1a1kyOXNiM0lpT2lJMVkySmhNMk5tWmlJc0luQmhaR1JwYm1jaU9pSXhOWHdxZkRNd2ZDcDhNVFY4S253ek1Id3FmSEI0SWl3aVltOTRjMmhoWkc5M0lqb2lNSHdxZkRCOEtud3dmQ3A4TUh3cWZEQXdNREF3TUdabUlpd2lZbTl5WkdWeUlqb2lNSHdxZkhOdmJHbGtmQ3A4TURBd01EQXdNREFpTENKaWIzSmtaWEp5WVdScGRYTWlPaUk1T1NKOUxIc2laWGgwY21FaU9pSWlMQ0ppWVdOclozSnZkVzVrWTI5c2IzSWlPaUkxTW1FM016Wm1aaUlzSW1KdmNtUmxjaUk2SWpCOEtueHpiMnhwWkh3cWZEQXdNREF3TURBd0luMWRmUT09In19fQ=='
));
array_push($styles, array(
'id' => 1013,
'value' =>
'eyJuYW1lIjoiUGlsbCBNb250c2VycmF0IEJsdWUiLCJkYXRhIjp7ImZvbnQiOnsiZm9udCI6ImV5SnVZVzFsSWpvaVUzUmhkR2xqSWl3aVpHRjBZU0k2VzNzaVpYaDBjbUVpT2lJaUxDSmpiMnh2Y2lJNkltWm1abVptWm1abUlpd2ljMmw2WlNJNklqRTBmSHh3ZUNJc0luUnphR0ZrYjNjaU9pSXdmQ3A4TUh3cWZEQjhLbnd3TURBd01EQm1aaUlzSW1GbWIyNTBJam9pVFc5dWRITmxjbkpoZEN3Z1FYSnBZV3dpTENKc2FXNWxhR1ZwWjJoMElqb2lNUzQxSWl3aVltOXNaQ0k2TUN3aWFYUmhiR2xqSWpvd0xDSjFibVJsY214cGJtVWlPakFzSW1Gc2FXZHVJam9pWTJWdWRHVnlJaXdpYkdWMGRHVnljM0JoWTJsdVp5STZJbTV2Y20xaGJDSXNJbmR2Y21SemNHRmphVzVuSWpvaWJtOXliV0ZzSWl3aWRHVjRkSFJ5WVc1elptOXliU0k2SW01dmJtVWlmU3g3SW1WNGRISmhJam9pSWl3aVkyOXNiM0lpT2lKbVptWm1abVptWmlKOVhYMD0ifSwic3R5bGUiOnsic3R5bGUiOiJleUp1WVcxbElqb2lVM1JoZEdsaklpd2laR0YwWVNJNlczc2laWGgwY21FaU9pSWlMQ0ppWVdOclozSnZkVzVrWTI5c2IzSWlPaUl3TVdGa1pETm1aaUlzSW5CaFpHUnBibWNpT2lJeE5Yd3FmRE13ZkNwOE1UVjhLbnd6TUh3cWZIQjRJaXdpWW05NGMyaGhaRzkzSWpvaU1Id3FmREI4S253d2ZDcDhNSHdxZkRBd01EQXdNR1ptSWl3aVltOXlaR1Z5SWpvaU1Id3FmSE52Ykdsa2ZDcDhNREF3TURBd01EQWlMQ0ppYjNKa1pYSnlZV1JwZFhNaU9pSTVPU0o5TEhzaVpYaDBjbUVpT2lJaUxDSmlZV05yWjNKdmRXNWtZMjlzYjNJaU9pSXdNVGxpWW1SbVppSXNJbUp2Y21SbGNpSTZJakI4S254emIyeHBaSHdxZkRBd01EQXdNREF3SW4xZGZRPT0ifX19'
));
array_push($styles, array(
'id' => 1014,
'value' =>
'eyJuYW1lIjoiUGlsbCBNb250c2VycmF0IFB1cnBsZSIsImRhdGEiOnsiZm9udCI6eyJmb250IjoiZXlKdVlXMWxJam9pVTNSaGRHbGpJaXdpWkdGMFlTSTZXM3NpWlhoMGNtRWlPaUlpTENKamIyeHZjaUk2SW1abVptWm1abVptSWl3aWMybDZaU0k2SWpFMGZIeHdlQ0lzSW5SemFHRmtiM2NpT2lJd2ZDcDhNSHdxZkRCOEtud3dNREF3TURCbVppSXNJbUZtYjI1MElqb2lUVzl1ZEhObGNuSmhkQ3dnUVhKcFlXd2lMQ0pzYVc1bGFHVnBaMmgwSWpvaU1TNDFJaXdpWW05c1pDSTZNQ3dpYVhSaGJHbGpJam93TENKMWJtUmxjbXhwYm1VaU9qQXNJbUZzYVdkdUlqb2lZMlZ1ZEdWeUlpd2liR1YwZEdWeWMzQmhZMmx1WnlJNkltNXZjbTFoYkNJc0luZHZjbVJ6Y0dGamFXNW5Jam9pYm05eWJXRnNJaXdpZEdWNGRIUnlZVzV6Wm05eWJTSTZJbTV2Ym1VaWZTeDdJbVY0ZEhKaElqb2lJaXdpWTI5c2IzSWlPaUptWm1abVptWm1aaUo5WFgwPSJ9LCJzdHlsZSI6eyJzdHlsZSI6ImV5SnVZVzFsSWpvaVUzUmhkR2xqSWl3aVpHRjBZU0k2VzNzaVpYaDBjbUVpT2lJaUxDSmlZV05yWjNKdmRXNWtZMjlzYjNJaU9pSTROelUzWWpKbVppSXNJbkJoWkdScGJtY2lPaUl4Tlh3cWZETXdmQ3A4TVRWOEtud3pNSHdxZkhCNElpd2lZbTk0YzJoaFpHOTNJam9pTUh3cWZEQjhLbnd3ZkNwOE1Id3FmREF3TURBd01HWm1JaXdpWW05eVpHVnlJam9pTUh3cWZITnZiR2xrZkNwOE1EQXdNREF3TURBaUxDSmliM0prWlhKeVlXUnBkWE1pT2lJNU9TSjlMSHNpWlhoMGNtRWlPaUlpTENKaVlXTnJaM0p2ZFc1a1kyOXNiM0lpT2lJM09UUmxZVEJtWmlJc0ltSnZjbVJsY2lJNklqQjhLbnh6YjJ4cFpId3FmREF3TURBd01EQXdJbjFkZlE9PSJ9fX0='
));
}
public function itemtextStorage(&$styles) {
array_push($styles, array(
'id' => 1001,
'value' =>
'eyJuYW1lIjoiUmFsZXdheSBCaWcgQ2VudGVyIEFsaWduZWQiLCJkYXRhIjp7ImZvbnQiOnsiZm9udCI6ImV5SnVZVzFsSWpvaVUzUmhkR2xqSWl3aVpHRjBZU0k2VzNzaVpYaDBjbUVpT2lJaUxDSmpiMnh2Y2lJNklqZGtOMlEzWkdabUlpd2ljMmw2WlNJNklqRTRmSHh3ZUNJc0luUnphR0ZrYjNjaU9pSXdmQ3A4TUh3cWZEQjhLbnd3TURBd01EQm1aaUlzSW1GbWIyNTBJam9pVW1Gc1pYZGhlU3dnUVhKcFlXd2lMQ0pzYVc1bGFHVnBaMmgwSWpvaU1TNDFJaXdpWW05c1pDSTZNQ3dpYVhSaGJHbGpJam93TENKMWJtUmxjbXhwYm1VaU9qQXNJbUZzYVdkdUlqb2lZMlZ1ZEdWeUlpd2liR1YwZEdWeWMzQmhZMmx1WnlJNkltNXZjbTFoYkNJc0luZHZjbVJ6Y0dGamFXNW5Jam9pYm05eWJXRnNJaXdpZEdWNGRIUnlZVzV6Wm05eWJTSTZJbTV2Ym1VaWZTeDdJbVY0ZEhKaElqb2lJaXdpWTI5c2IzSWlPaUl4T0Rrd1pEZG1aaUo5TEhzaVpYaDBjbUVpT2lJaWZWMTkifSwic3R5bGUiOnsic3R5bGUiOiIifX19'
));
array_push($styles, array(
'id' => 1002,
'value' =>
'eyJuYW1lIjoiUmFsZXdheSBMaWdodCBMZWZ0IEFsaWduZWQiLCJkYXRhIjp7ImZvbnQiOnsiZm9udCI6ImV5SnVZVzFsSWpvaVUzUmhkR2xqSWl3aVpHRjBZU0k2VzNzaVpYaDBjbUVpT2lJaUxDSmpiMnh2Y2lJNkltWm1abVptWm1abUlpd2ljMmw2WlNJNklqRTBmSHh3ZUNJc0luUnphR0ZrYjNjaU9pSXdmQ3A4TUh3cWZEQjhLbnd3TURBd01EQm1aaUlzSW1GbWIyNTBJam9pVW1Gc1pYZGhlU3dnUVhKcFlXd2lMQ0pzYVc1bGFHVnBaMmgwSWpvaU1TNDFJaXdpWW05c1pDSTZNQ3dpYVhSaGJHbGpJam93TENKMWJtUmxjbXhwYm1VaU9qQXNJbUZzYVdkdUlqb2liR1ZtZENJc0lteGxkSFJsY25Od1lXTnBibWNpT2lKdWIzSnRZV3dpTENKM2IzSmtjM0JoWTJsdVp5STZJbTV2Y20xaGJDSXNJblJsZUhSMGNtRnVjMlp2Y20waU9pSnViMjVsSW4wc2V5SmxlSFJ5WVNJNklpSXNJbU52Ykc5eUlqb2lNVGc1TUdRM1ptWWlmU3g3SW1WNGRISmhJam9pSW4xZGZRPT0ifSwic3R5bGUiOnsic3R5bGUiOiIifX19'
));
array_push($styles, array(
'id' => 1003,
'value' =>
'eyJuYW1lIjoiUmFsZXdheSBEYXJrIExlZnQgQWxpZ25lZCIsImRhdGEiOnsiZm9udCI6eyJmb250IjoiZXlKdVlXMWxJam9pVTNSaGRHbGpJaXdpWkdGMFlTSTZXM3NpWlhoMGNtRWlPaUlpTENKamIyeHZjaUk2SWpNek16TXpNMlptSWl3aWMybDZaU0k2SWpFMGZIeHdlQ0lzSW5SemFHRmtiM2NpT2lJd2ZDcDhNSHdxZkRCOEtud3dNREF3TURCbVppSXNJbUZtYjI1MElqb2lVbUZzWlhkaGVTd2dRWEpwWVd3aUxDSnNhVzVsYUdWcFoyaDBJam9pTVM0MUlpd2lZbTlzWkNJNk1Dd2lhWFJoYkdsaklqb3dMQ0oxYm1SbGNteHBibVVpT2pBc0ltRnNhV2R1SWpvaWJHVm1kQ0lzSW14bGRIUmxjbk53WVdOcGJtY2lPaUp1YjNKdFlXd2lMQ0ozYjNKa2MzQmhZMmx1WnlJNkltNXZjbTFoYkNJc0luUmxlSFIwY21GdWMyWnZjbTBpT2lKdWIyNWxJbjBzZXlKbGVIUnlZU0k2SWlJc0ltTnZiRzl5SWpvaU1UZzVNR1EzWm1ZaWZTeDdJbVY0ZEhKaElqb2lJbjFkZlE9PSJ9LCJzdHlsZSI6eyJzdHlsZSI6IiJ9fX0='
));
array_push($styles, array(
'id' => 1004,
'value' =>
'eyJuYW1lIjoiTW9udHNlcnJhdCBEYXJrIExlZnQgQWxpZ25lZCIsImRhdGEiOnsiZm9udCI6eyJmb250IjoiZXlKdVlXMWxJam9pVTNSaGRHbGpJaXdpWkdGMFlTSTZXM3NpWlhoMGNtRWlPaUlpTENKamIyeHZjaUk2SWpNek16TXpNMlptSWl3aWMybDZaU0k2SWpFMGZIeHdlQ0lzSW5SemFHRmtiM2NpT2lJd2ZDcDhNSHdxZkRCOEtud3dNREF3TURCbVppSXNJbUZtYjI1MElqb2lUVzl1ZEhObGNuSmhkQ3dnUVhKcFlXd2lMQ0pzYVc1bGFHVnBaMmgwSWpvaU1TNDFJaXdpWW05c1pDSTZNQ3dpYVhSaGJHbGpJam93TENKMWJtUmxjbXhwYm1VaU9qQXNJbUZzYVdkdUlqb2liR1ZtZENJc0lteGxkSFJsY25Od1lXTnBibWNpT2lKdWIzSnRZV3dpTENKM2IzSmtjM0JoWTJsdVp5STZJbTV2Y20xaGJDSXNJblJsZUhSMGNtRnVjMlp2Y20waU9pSnViMjVsSW4wc2V5SmxlSFJ5WVNJNklpSXNJbU52Ykc5eUlqb2lNVGc1TUdRM1ptWWlmU3g3SW1WNGRISmhJam9pSW4xZGZRPT0ifSwic3R5bGUiOnsic3R5bGUiOiIifX19'
));
array_push($styles, array(
'id' => 1005,
'value' =>
'eyJuYW1lIjoiTW9udHNlcnJhdCBMaWdodCBMZWZ0IEFsaWduZWQiLCJkYXRhIjp7ImZvbnQiOnsiZm9udCI6ImV5SnVZVzFsSWpvaVUzUmhkR2xqSWl3aVpHRjBZU0k2VzNzaVpYaDBjbUVpT2lJaUxDSmpiMnh2Y2lJNkltWm1abVptWm1abUlpd2ljMmw2WlNJNklqRTBmSHh3ZUNJc0luUnphR0ZrYjNjaU9pSXdmQ3A4TUh3cWZEQjhLbnd3TURBd01EQm1aaUlzSW1GbWIyNTBJam9pVFc5dWRITmxjbkpoZEN3Z1FYSnBZV3dpTENKc2FXNWxhR1ZwWjJoMElqb2lNUzQxSWl3aVltOXNaQ0k2TUN3aWFYUmhiR2xqSWpvd0xDSjFibVJsY214cGJtVWlPakFzSW1Gc2FXZHVJam9pYkdWbWRDSXNJbXhsZEhSbGNuTndZV05wYm1jaU9pSnViM0p0WVd3aUxDSjNiM0prYzNCaFkybHVaeUk2SW01dmNtMWhiQ0lzSW5SbGVIUjBjbUZ1YzJadmNtMGlPaUp1YjI1bEluMHNleUpsZUhSeVlTSTZJaUlzSW1OdmJHOXlJam9pTVRnNU1HUTNabVlpZlN4N0ltVjRkSEpoSWpvaUluMWRmUT09In0sInN0eWxlIjp7InN0eWxlIjoiIn19fQ=='
));
array_push($styles, array(
'id' => 1006,
'value' =>
'eyJuYW1lIjoiTW9udHNlcnJhdCBEYXJrIENlbnRlciBBbGlnbmVkIiwiZGF0YSI6eyJmb250Ijp7ImZvbnQiOiJleUp1WVcxbElqb2lVM1JoZEdsaklpd2laR0YwWVNJNlczc2laWGgwY21FaU9pSWlMQ0pqYjJ4dmNpSTZJak16TXpNek0yWm1JaXdpYzJsNlpTSTZJakUwZkh4d2VDSXNJblJ6YUdGa2IzY2lPaUl3ZkNwOE1Id3FmREI4S253d01EQXdNREJtWmlJc0ltRm1iMjUwSWpvaVRXOXVkSE5sY25KaGRDd2dRWEpwWVd3aUxDSnNhVzVsYUdWcFoyaDBJam9pTVM0MUlpd2lZbTlzWkNJNk1Dd2lhWFJoYkdsaklqb3dMQ0oxYm1SbGNteHBibVVpT2pBc0ltRnNhV2R1SWpvaVkyVnVkR1Z5SWl3aWJHVjBkR1Z5YzNCaFkybHVaeUk2SW01dmNtMWhiQ0lzSW5kdmNtUnpjR0ZqYVc1bklqb2libTl5YldGc0lpd2lkR1Y0ZEhSeVlXNXpabTl5YlNJNkltNXZibVVpZlN4N0ltVjRkSEpoSWpvaUlpd2lZMjlzYjNJaU9pSXhPRGt3WkRkbVppSjlMSHNpWlhoMGNtRWlPaUlpZlYxOSJ9LCJzdHlsZSI6eyJzdHlsZSI6IiJ9fX0='
));
array_push($styles, array(
'id' => 1007,
'value' =>
'eyJuYW1lIjoiTW9udHNlcnJhdCBMaWdodCBDZW50ZXIgQWxpZ25lZCIsImRhdGEiOnsiZm9udCI6eyJmb250IjoiZXlKdVlXMWxJam9pVTNSaGRHbGpJaXdpWkdGMFlTSTZXM3NpWlhoMGNtRWlPaUlpTENKamIyeHZjaUk2SW1abVptWm1abVptSWl3aWMybDZaU0k2SWpFMGZIeHdlQ0lzSW5SemFHRmtiM2NpT2lJd2ZDcDhNSHdxZkRCOEtud3dNREF3TURCbVppSXNJbUZtYjI1MElqb2lUVzl1ZEhObGNuSmhkQ3dnUVhKcFlXd2lMQ0pzYVc1bGFHVnBaMmgwSWpvaU1TNDFJaXdpWW05c1pDSTZNQ3dpYVhSaGJHbGpJam93TENKMWJtUmxjbXhwYm1VaU9qQXNJbUZzYVdkdUlqb2lZMlZ1ZEdWeUlpd2liR1YwZEdWeWMzQmhZMmx1WnlJNkltNXZjbTFoYkNJc0luZHZjbVJ6Y0dGamFXNW5Jam9pYm05eWJXRnNJaXdpZEdWNGRIUnlZVzV6Wm05eWJTSTZJbTV2Ym1VaWZTeDdJbVY0ZEhKaElqb2lJaXdpWTI5c2IzSWlPaUl4T0Rrd1pEZG1aaUo5TEhzaVpYaDBjbUVpT2lJaWZWMTkifSwic3R5bGUiOnsic3R5bGUiOiIifX19'
));
//array_push($styles, );
}
public function itemiconStorage(&$styles) {
array_push($styles, array(
'id' => 1000,
'value' =>
'eyJuYW1lIjoiUm91bmRlZCBXaGl0ZSBCYWNrZ3JvdW5kIiwiZGF0YSI6eyJmb250Ijp7fSwic3R5bGUiOnsic3R5bGUiOiJleUp1WVcxbElqb2lVM1JoZEdsaklpd2laR0YwWVNJNlczc2laWGgwY21FaU9pSWlMQ0ppWVdOclozSnZkVzVrWTI5c2IzSWlPaUptWm1abVptWm1aaUlzSW5CaFpHUnBibWNpT2lJeE1Id3FmREV3ZkNwOE1UQjhLbnd4TUh3cWZIQjRJaXdpWW05NGMyaGhaRzkzSWpvaU1Id3FmREI4S253d2ZDcDhNSHdxZkRBd01EQXdNR1ptSWl3aVltOXlaR1Z5SWpvaU1Id3FmSE52Ykdsa2ZDcDhNREF3TURBd1ptWWlMQ0ppYjNKa1pYSnlZV1JwZFhNaU9pSXpJbjBzZXlKbGVIUnlZU0k2SWlKOVhYMD0ifX19'
));
array_push($styles, array(
'id' => 1001,
'value' =>
'eyJuYW1lIjoiQ2lyY2xlIFdoaXRlIEJhY2tncm91bmQiLCJkYXRhIjp7ImZvbnQiOnt9LCJzdHlsZSI6eyJzdHlsZSI6ImV5SnVZVzFsSWpvaVUzUmhkR2xqSWl3aVpHRjBZU0k2VzNzaVpYaDBjbUVpT2lJaUxDSmlZV05yWjNKdmRXNWtZMjlzYjNJaU9pSm1abVptWm1abVppSXNJbkJoWkdScGJtY2lPaUl4TUh3cWZERXdmQ3A4TVRCOEtud3hNSHdxZkhCNElpd2lZbTk0YzJoaFpHOTNJam9pTUh3cWZEQjhLbnd3ZkNwOE1Id3FmREF3TURBd01HWm1JaXdpWW05eVpHVnlJam9pTUh3cWZITnZiR2xrZkNwOE1EQXdNREF3Wm1ZaUxDSmliM0prWlhKeVlXUnBkWE1pT2lJNU9TSjlMSHNpWlhoMGNtRWlPaUlpZlYxOSJ9fX0='
));
array_push($styles, array(
'id' => 1002,
'value' =>
'eyJuYW1lIjoiQ2lyY2xlIEdob3N0IFdoaXRlIiwiZGF0YSI6eyJmb250Ijp7fSwic3R5bGUiOnsic3R5bGUiOiJleUp1WVcxbElqb2lVM1JoZEdsaklpd2laR0YwWVNJNlczc2laWGgwY21FaU9pSWlMQ0ppWVdOclozSnZkVzVrWTI5c2IzSWlPaUl3TURBd01EQXdNQ0lzSW5CaFpHUnBibWNpT2lJeE1Id3FmREV3ZkNwOE1UQjhLbnd4TUh3cWZIQjRJaXdpWW05NGMyaGhaRzkzSWpvaU1Id3FmREI4S253d2ZDcDhNSHdxZkRBd01EQXdNR1ptSWl3aVltOXlaR1Z5SWpvaU1ud3FmSE52Ykdsa2ZDcDhabVptWm1abVptWWlMQ0ppYjNKa1pYSnlZV1JwZFhNaU9pSTVPU0o5TEhzaVpYaDBjbUVpT2lJaWZWMTkifX19'
));
}
}PK;e�[������Widget/AbstractWidget.phpnu�[���<?php
namespace Nextend\SmartSlider3\Widget;
use Nextend\Framework\Data\Data;
use Nextend\Framework\Form\ContainerInterface;
use Nextend\Framework\Pattern\GetAssetsPathTrait;
use Nextend\SmartSlider3\BackupSlider\ExportSlider;
use Nextend\SmartSlider3\BackupSlider\ImportSlider;
use Nextend\SmartSlider3\Widget\Group\AbstractWidgetGroup;
abstract class AbstractWidget {
use GetAssetsPathTrait;
protected $name;
protected $key;
protected $defaults = array();
/**
* AbstractWidget constructor.
*
* @param AbstractWidgetGroup $widgetGroup
* @param string $name
* @param array $defaults
*/
public function __construct($widgetGroup, $name, $defaults = array()) {
$this->name = $name;
$this->defaults = array_merge($this->defaults, $defaults);
$widgetGroup->addWidget($name, $this);
}
public function getName() {
return $this->name;
}
public function getSubFormImagePath() {
return self::getAssetsPath() . '/' . $this->name .
'.png';
}
public function getDefaults() {
return $this->defaults;
}
/**
* @param SliderWidget $sliderWidget
*
* @return AbstractWidgetFrontend
*/
public function createFrontend($sliderWidget, $params) {
$className = static::class . 'Frontend';
$params->fillDefault($this->getDefaults());
return new $className($sliderWidget, $this, $params);
}
public function getKey() {
return $this->key;
}
/**
* @param ExportSlider $export
* @param Data $params
*/
public function prepareExport($export, $params) {
}
/**
* @param ImportSlider $import
* @param Data $params
*/
public function prepareImport($import, $params) {
}
/**
* @param ContainerInterface $container
*/
abstract public function renderFields($container);
}PK;e�[�1~��!Widget/AbstractWidgetFrontend.phpnu�[���<?php
namespace Nextend\SmartSlider3\Widget;
use Nextend\Framework\Data\Data;
use Nextend\Framework\Pattern\GetAssetsPathTrait;
use Nextend\SmartSlider3\Slider\Slider;
abstract class AbstractWidgetFrontend {
use GetAssetsPathTrait;
/** @var SliderWidget */
protected $sliderWidget;
/**
* @var Slider
*/
protected $slider;
/** @var AbstractWidget */
protected $widget;
protected $key;
/**
* @var Data
*/
protected $params;
/**
* AbstractWidgetFrontend constructor.
*
* @param SliderWidget $sliderWidget
* @param AbstractWidget $widget
*/
public function __construct($sliderWidget, $widget, $params) {
$this->sliderWidget = $sliderWidget;
$this->slider = $sliderWidget->slider;
$this->widget = $widget;
$this->params = $params;
$this->key = $widget->getKey();
}
protected function addToPlacement($key, $renderCallback) {
$params = $this->params;
if ($params->get($key . 'mode') == 'simple')
{
$area = intval($params->get($key . 'area'));
$stack = intval($params->get($key . 'stack', 1));
$this->sliderWidget->addToSimplePlacement($renderCallback,
$this->translateArea($area), $stack, $params->get($key .
'offset', 0));
} else {
$horizontalSide = $params->get($key .
'horizontal', 'left');
$horizontalPosition = $params->get($key .
'horizontal-position', 0);
$horizontalUnit = $params->get($key .
'horizontal-unit', 'px');
$verticalSide = $params->get($key .
'vertical', 'top');
$verticalPosition = $params->get($key .
'vertical-position', 0);
$verticalUnit = $params->get($key .
'vertical-unit', 'px');
$this->sliderWidget->addToAdvancedPlacement($renderCallback,
$horizontalSide, $horizontalPosition, $horizontalUnit, $verticalSide,
$verticalPosition, $verticalUnit);
}
}
protected function translateArea($area) {
static $areas = array(
1 => 'above',
2 => 'absolute-left-top',
3 => 'absolute-center-top',
4 => 'absolute-right-top',
5 => 'absolute-left',
6 => 'absolute-left-center',
7 => 'absolute-right-center',
8 => 'absolute-right',
9 => 'absolute-left-bottom',
10 => 'absolute-center-bottom',
11 => 'absolute-right-bottom',
12 => 'below',
);
return $areas[$area];
}
public function getDefaults() {
return $this->widget->getDefaults();
}
/**
* @param Data $params
* @param string $key
* @param integer $showOnMobileDefault
*
* @return array
*/
protected function getDisplayAttributes($params, $key,
$showOnMobileDefault = 0) {
$attributes = array(
'class' => 'n2-ss-widget'
);
if (!$params->get($key . 'display-desktoplandscape',
1)) {
$attributes['data-hide-desktoplandscape'] = 1;
}
if (!$params->get($key . 'display-desktopportrait',
1)) {
$attributes['data-hide-desktopportrait'] = 1;
}
if (!$params->get($key . 'display-tabletlandscape',
1)) {
$attributes['data-hide-tabletlandscape'] = 1;
}
if (!$params->get($key . 'display-tabletportrait', 1))
{
$attributes['data-hide-tabletportrait'] = 1;
}
if (!$params->get($key . 'display-mobilelandscape',
$showOnMobileDefault)) {
$attributes['data-hide-mobilelandscape'] = 1;
}
if (!$params->get($key . 'display-mobileportrait',
$showOnMobileDefault)) {
$attributes['data-hide-mobileportrait'] = 1;
}
if ($params->get($key . 'display-hover', 0)) {
$attributes['class'] .= '
n2-ss-widget-display-hover';
}
$excludeSlides = $params->get($key . 'exclude-slides',
'');
if (!empty($excludeSlides)) {
$attributes['data-exclude-slides'] = $excludeSlides;
}
return $attributes;
}
public static function getOrientationByPosition($mode, $area, $set =
'auto', $default = 'horizontal') {
if ($mode == 'advanced') {
if ($set == 'auto') {
return $default;
}
return $set;
}
if ($set != 'auto') {
return $set;
}
switch ($area) {
case '5':
case '6':
case '7':
case '8':
return 'vertical';
break;
}
return 'horizontal';
}
}PK;e�[��)���$Widget/Arrow/AbstractWidgetArrow.phpnu�[���<?php
namespace Nextend\SmartSlider3\Widget\Arrow;
use Nextend\SmartSlider3\Widget\AbstractWidget;
abstract class AbstractWidgetArrow extends AbstractWidget {
protected $key = 'widget-arrow-';
}PK;e�[�\�� �
&Widget/Arrow/ArrowImage/ArrowImage.phpnu�[���<?php
namespace Nextend\SmartSlider3\Widget\Arrow\ArrowImage;
use Nextend\Framework\Form\Element\Grouping;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Radio\ImageListFromFolder;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Style;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Element\Text\Color;
use Nextend\Framework\Form\Element\Text\FieldImage;
use Nextend\Framework\Form\Fieldset\FieldsetRow;
use Nextend\SmartSlider3\Form\Element\Group\WidgetPosition;
use Nextend\SmartSlider3\Widget\Arrow\AbstractWidgetArrow;
class ArrowImage extends AbstractWidgetArrow {
protected $defaults = array(
'widget-arrow-desktop-image-width' => 32,
'widget-arrow-tablet-image-width' => 32,
'widget-arrow-mobile-image-width' => 16,
'widget-arrow-previous-image' =>
'',
'widget-arrow-previous' =>
'$ss$/plugins/widgetarrow/image/image/previous/normal.svg',
'widget-arrow-previous-color' =>
'ffffffcc',
'widget-arrow-previous-hover' => 0,
'widget-arrow-previous-hover-color' =>
'ffffffcc',
'widget-arrow-style' =>
'{"data":[{"backgroundcolor":"000000ab","padding":"20|*|10|*|20|*|10|*|px","boxshadow":"0|*|0|*|0|*|0|*|000000ff","border":"0|*|solid|*|000000ff","borderradius":"5","extra":""},{"backgroundcolor":"000000cf"}]}',
'widget-arrow-previous-position-mode' =>
'simple',
'widget-arrow-previous-position-area' => 6,
'widget-arrow-previous-position-offset' => 15,
'widget-arrow-next-position-mode' =>
'simple',
'widget-arrow-next-position-area' => 7,
'widget-arrow-next-position-offset' => 15,
'widget-arrow-animation' =>
'fade',
'widget-arrow-mirror' => 1,
'widget-arrow-next-image' =>
'',
'widget-arrow-next' =>
'$ss$/plugins/widgetarrow/image/image/next/normal.svg',
'widget-arrow-next-color' =>
'ffffffcc',
'widget-arrow-next-hover' => 0,
'widget-arrow-next-hover-color' =>
'ffffffcc',
'widget-arrow-previous-alt' =>
'previous arrow',
'widget-arrow-next-alt' => 'next
arrow',
'widget-arrow-base64' => 1
);
public function renderFields($container) {
$rowPrevious = new FieldsetRow($container,
'widget-arrow-image-row-previous');
$fieldPrevious = new ImageListFromFolder($rowPrevious,
'widget-arrow-previous', n2_x('Previous', 'Arrow
direction'), '', array(
'folder' => self::getAssetsPath() .
'/previous/'
));
new FieldImage($fieldPrevious,
'widget-arrow-previous-image', n2_('Previous image'),
'', array(
'relatedFieldsOff' => array(
'sliderwidget-arrow-image-row-icon-grouping-previous-color-container'
)
));
$groupingPreviousColorContainer = new Grouping($rowPrevious,
'widget-arrow-image-row-icon-grouping-previous-color-container');
$groupingPreviousColor = new
Grouping($groupingPreviousColorContainer,
'widget-arrow-image-row-icon-grouping-previous-color');
new Color($groupingPreviousColor,
'widget-arrow-previous-color', n2_('Color'),
'', array(
'alpha' => true
));
new OnOff($groupingPreviousColor,
'widget-arrow-previous-hover', n2_('Hover'), 0, array(
'relatedFieldsOn' => array(
'sliderwidget-arrow-previous-hover-color'
)
));
new Color($groupingPreviousColor,
'widget-arrow-previous-hover-color', n2_('Hover
color'), '', array(
'alpha' => true
));
new OnOff($rowPrevious, 'widget-arrow-mirror',
n2_('Mirror'), '', array(
'relatedFieldsOff' => array(
'sliderwidget-arrow-image-row-icon-grouping-next'
)
));
$groupingNext = new Grouping($rowPrevious,
'widget-arrow-image-row-icon-grouping-next');
$fieldNext = new ImageListFromFolder($groupingNext,
'widget-arrow-next', n2_x('Next', 'Arrow
direction'), '', array(
'folder' => self::getAssetsPath() .
'/next/'
));
new FieldImage($fieldNext, 'widget-arrow-next-image',
n2_('Next image'), '', array(
'relatedFieldsOff' => array(
'sliderwidget-arrow-image-row-icon-grouping-next-color-container'
)
));
$groupingNextColorContainer = new Grouping($groupingNext,
'widget-arrow-image-row-icon-grouping-next-color-container');
$groupingNextColor = new
Grouping($groupingNextColorContainer,
'widget-arrow-image-row-icon-grouping-next-color');
new Color($groupingNextColor, 'widget-arrow-next-color',
n2_('Color'), '', array(
'alpha' => true
));
new OnOff($groupingNextColor, 'widget-arrow-next-hover',
n2_('Hover'), 0, array(
'relatedFieldsOn' => array(
'sliderwidget-arrow-next-hover-color'
)
));
new Color($groupingNextColor,
'widget-arrow-next-hover-color', n2_('Hover color'),
'', array(
'alpha' => true
));
$row2 = new FieldsetRow($container,
'widget-arrow-image-row-2');
new Style($row2, 'widget-arrow-style',
n2_('Arrow'), '', array(
'mode' => 'button',
'preview' =>
'SmartSliderAdminWidgetArrowImage',
));
new WidgetPosition($row2,
'widget-arrow-previous-position', n2_('Previous
position'));
new WidgetPosition($row2, 'widget-arrow-next-position',
n2_('Next position'));
new Select($row2, 'widget-arrow-animation',
n2_('Animation'), '', array(
'options' => array(
'none' => n2_('None'),
'fade' => n2_('Fade'),
'horizontal' => n2_('Horizontal'),
'vertical' => n2_('Vertical'),
)
));
$row3 = new FieldsetRow($container,
'widget-arrow-image-row-3');
new Text($row3, 'widget-arrow-previous-alt',
n2_('Previous alt tag'), 'previous arrow');
new Text($row3, 'widget-arrow-next-alt', n2_('Next
alt tag'), 'next arrow');
new OnOff($row3, 'widget-arrow-base64',
n2_('Base64'), 1, array(
'tipLabel' => n2_('Base64'),
'tipDescription' => n2_('Base64 encoded
arrow images are loading faster and they are colorable. But optimization
plugins often have errors in their codes related to them, so if your arrow
won\'t load, turn this option off.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1782-arrow#base64',
'relatedFieldsOn' => array(
'sliderwidget-arrow-image-row-icon-grouping-previous-color',
'sliderwidget-arrow-image-row-icon-grouping-next-color'
)
));
$row4 = new FieldsetRow($container,
'widget-arrow-image-row-4');
new Text\Number($row4,
'widget-arrow-desktop-image-width', n2_('Image width -
Desktop'), '', array(
'wide' => 4,
'unit' => 'px'
));
new Text\Number($row4, 'widget-arrow-tablet-image-width',
n2_('Image width - Tablet'), '', array(
'wide' => 4,
'unit' => 'px'
));
new Text\Number($row4, 'widget-arrow-mobile-image-width',
n2_('Image width - Mobile'), '', array(
'wide' => 4,
'unit' => 'px'
));
}
public function prepareExport($export, $params) {
$export->addImage($params->get($this->key .
'previous-image', ''));
$export->addImage($params->get($this->key .
'next-image', ''));
$export->addVisual($params->get($this->key .
'style'));
}
public function prepareImport($import, $params) {
$params->set($this->key . 'previous-image',
$import->fixImage($params->get($this->key .
'previous-image', '')));
$params->set($this->key . 'next-image',
$import->fixImage($params->get($this->key .
'next-image', '')));
$params->set($this->key . 'style',
$import->fixSection($params->get($this->key . 'style',
'')));
}
}PK;e�[O�["^*^*.Widget/Arrow/ArrowImage/ArrowImageFrontend.phpnu�[���<?php
namespace Nextend\SmartSlider3\Widget\Arrow\ArrowImage;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\FastImageSize\FastImageSize;
use Nextend\Framework\Filesystem\Filesystem;
use Nextend\Framework\Misc\Base64;
use Nextend\Framework\Parser\Color;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Widget\AbstractWidgetFrontend;
class ArrowImageFrontend extends AbstractWidgetFrontend {
protected $rendered = false;
protected $previousArguments;
protected $nextArguments;
public function __construct($sliderWidget, $widget, $params) {
parent::__construct($sliderWidget, $widget, $params);
if ($this->isRenderable('previous')) {
$this->addToPlacement($this->key .
'previous-position-', array(
$this,
'renderPrevious'
));
}
if ($this->isRenderable('next')) {
$this->addToPlacement($this->key .
'next-position-', array(
$this,
'renderNext'
));
}
}
private function isRenderable($side) {
$arrow = $this->params->get($this->key . $side .
'-image');
if (empty($arrow)) {
$arrow = $this->params->get($this->key . $side);
if ($arrow == -1) {
$arrow = null;
}
}
return !!$arrow;
}
public function renderPrevious($attributes = array()) {
$this->render();
if ($this->previousArguments) {
array_unshift($this->previousArguments, $attributes);
return call_user_func_array(array(
$this,
'getHTML'
), $this->previousArguments);
}
return '';
}
public function renderNext($attributes = array()) {
$this->render();
if ($this->nextArguments) {
array_unshift($this->nextArguments, $attributes);
return call_user_func_array(array(
$this,
'getHTML'
), $this->nextArguments);
}
return '';
}
private function render() {
if ($this->rendered) return;
$this->rendered = true;
$slider = $this->slider;
$id = $this->slider->elementId;
$params = $this->params;
if ($slider->getSlidesCount() <= 1) {
return '';
}
$previousImage = $params->get($this->key .
'previous-image');
$previousValue = $params->get($this->key .
'previous');
$previousColor = $params->get($this->key .
'previous-color');
$previousHover = $params->get($this->key .
'previous-hover');
$previousHoverColor = $params->get($this->key .
'previous-hover-color');
if (empty($previousImage)) {
if ($previousValue == -1) {
$previous = false;
} else {
$previous =
ResourceTranslator::pathToResource(self::getAssetsPath() .
'/previous/' . basename($previousValue));
}
} else {
$previous = $previousImage;
}
if ($params->get($this->key . 'mirror')) {
$nextColor = $previousColor;
$nextHover = $previousHover;
$nextHoverColor = $previousHoverColor;
if (empty($previousImage)) {
if ($previousValue == -1) {
$next = false;
} else {
$next =
ResourceTranslator::pathToResource(self::getAssetsPath() .
'/next/' . basename($previousValue));
}
} else {
$next = $previousImage;
$slider->addCSS('#' . $id .
'-arrow-next' . '{transform: rotate(180deg);}');
}
} else {
$next = $params->get($this->key .
'next-image');
$nextColor = $params->get($this->key .
'next-color');
$nextHover = $params->get($this->key .
'next-hover');
$nextHoverColor = $params->get($this->key .
'next-hover-color');
if (empty($next)) {
$nextValue = $params->get($this->key .
'next');
if ($nextValue == -1) {
$next = false;
} else {
$next =
ResourceTranslator::pathToResource(self::getAssetsPath() .
'/next/' . basename($nextValue));
}
}
}
if ($previous || $next) {
$slider->addLess(self::getAssetsPath() .
'/style.n2less', array(
"sliderid" => $slider->elementId
));
Js::addStaticGroup(self::getAssetsPath() .
'/dist/w-arrow-image.min.js', 'w-arrow-image');
$displayAttributes = $this->getDisplayAttributes($params,
$this->key);
$animation = $params->get($this->key .
'animation');
if ($animation == 'none' || $animation ==
'fade') {
$styleClass =
$slider->addStyle($params->get($this->key . 'style'),
'heading');
} else {
$styleClass =
$slider->addStyle($params->get($this->key . 'style'),
'heading-active');
}
if ($previous) {
$this->previousArguments = array(
$id,
$animation,
'previous',
$previous,
$displayAttributes,
$styleClass,
$previousColor,
$previousHover,
$previousHoverColor
);
}
if ($next) {
$this->nextArguments = array(
$id,
$animation,
'next',
$next,
$displayAttributes,
$styleClass,
$nextColor,
$nextHover,
$nextHoverColor
);
}
$desktopWidth =
$params->get('widget-arrow-desktop-image-width');
$tabletWidth =
$params->get('widget-arrow-tablet-image-width');
$mobileWidth =
$params->get('widget-arrow-mobile-image-width');
$slider->addDeviceCSS('all', 'div#' .
$id . ' .nextend-arrow img{width: ' . $desktopWidth .
'px}');
if ($tabletWidth != $desktopWidth) {
$slider->addDeviceCSS('tabletportrait',
'div#' . $id . ' .nextend-arrow img{width: ' .
$tabletWidth . 'px}');
$slider->addDeviceCSS('tabletlandscape',
'div#' . $id . ' .nextend-arrow img{width: ' .
$tabletWidth . 'px}');
}
if ($mobileWidth != $desktopWidth) {
$slider->addDeviceCSS('mobileportrait',
'div#' . $id . ' .nextend-arrow img{width: ' .
$mobileWidth . 'px}');
$slider->addDeviceCSS('mobilelandscape',
'div#' . $id . ' .nextend-arrow img{width: ' .
$mobileWidth . 'px}');
}
$slider->features->addInitCallback('new
_N2.SmartSliderWidgetArrowImage(this);');
$slider->sliderType->addJSDependency('SmartSliderWidgetArrowImage');
}
}
/**
* @param array $attributes
* @param string $id
* @param string $animation
* @param string $side
* @param string $imageRaw
* @param string $displayAttributes
* @param string $styleClass
* @param string $color
* @param int $hover
* @param string $hoverColor
*
* @return string
*/
private function getHTML($attributes, $id, $animation, $side,
$imageRaw, $displayAttributes, $styleClass, $color = 'ffffffcc',
$hover = 0, $hoverColor = 'ffffffcc') {
$imageHover = null;
$ext = pathinfo($imageRaw, PATHINFO_EXTENSION);
/**
* We can not colorize SVGs when base64 disabled.
*/
if ($ext == 'svg' &&
ResourceTranslator::isResource($imageRaw) &&
$this->params->get($this->key . 'base64', 1)) {
list($color, $opacity) = Color::colorToSVG($color);
$content =
Filesystem::readFile(ResourceTranslator::toPath($imageRaw));
$image = 'data:image/svg+xml;base64,' .
Base64::encode(str_replace(array(
'fill="#FFF"',
'opacity="1"'
), array(
'fill="#' . $color . '"',
'opacity="' . $opacity .
'"'
), $content));
if ($hover) {
list($color, $opacity) = Color::colorToSVG($hoverColor);
$imageHover = 'data:image/svg+xml;base64,' .
Base64::encode(str_replace(array(
'fill="#FFF"',
'opacity="1"'
), array(
'fill="#' . $color .
'"',
'opacity="' . $opacity .
'"'
), $content));
}
} else {
$image = ResourceTranslator::toUrl($imageRaw);
}
$alt = $this->params->get($this->key . $side .
'-alt', $side . ' arrow');
$sizeAttributes = array();
FastImageSize::initAttributes($imageRaw, $sizeAttributes);
if ($imageHover === null) {
$image = Html::image($image, $alt, $sizeAttributes +
Html::addExcludeLazyLoadAttributes());
} else {
$image = Html::image($image, $alt, $sizeAttributes +
Html::addExcludeLazyLoadAttributes(array(
'class' =>
'n2-arrow-normal-img'
))) . Html::image($imageHover, $alt, $sizeAttributes +
Html::addExcludeLazyLoadAttributes(array(
'class' =>
'n2-arrow-hover-img'
)));
}
if ($animation == 'none' || $animation ==
'fade') {
return Html::tag('div',
Html::mergeAttributes($attributes, $displayAttributes, array(
'id' => $id . '-arrow-' .
$side,
'class' => $styleClass .
'nextend-arrow n2-ow-all nextend-arrow-' . $side . '
nextend-arrow-animated-' . $animation,
'role' => 'button',
'aria-label' => $alt,
'tabindex' => '0'
)), $image);
}
return Html::tag('div',
Html::mergeAttributes($attributes, $displayAttributes, array(
'id' => $id . '-arrow-' . $side,
'class' => 'nextend-arrow
nextend-arrow-animated n2-ow-all nextend-arrow-animated-' . $animation
. ' nextend-arrow-' . $side,
'role' => 'button',
'aria-label' => $alt,
'tabindex' => '0'
)), Html::tag('div', array(
'class' => $styleClass
), $image) . Html::tag('div', array(
'class' => $styleClass . '
n2-active'
), $image));
}
}PK;e�[WcK���*Widget/Autoplay/AbstractWidgetAutoplay.phpnu�[���<?php
namespace Nextend\SmartSlider3\Widget\Autoplay;
use Nextend\SmartSlider3\Widget\AbstractWidget;
abstract class AbstractWidgetAutoplay extends AbstractWidget {
protected $key = 'widget-autoplay-';
}PK;e�[��xA&&/Widget/Autoplay/AutoplayImage/AutoplayImage.phpnu�[���<?php
namespace Nextend\SmartSlider3\Widget\Autoplay\AutoplayImage;
use Nextend\Framework\Form\Element\Grouping;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Radio\ImageListFromFolder;
use Nextend\Framework\Form\Element\Style;
use Nextend\Framework\Form\Element\Text\Color;
use Nextend\Framework\Form\Element\Text\FieldImage;
use Nextend\Framework\Form\Element\Text\Number;
use Nextend\Framework\Form\Fieldset\FieldsetRow;
use Nextend\SmartSlider3\Form\Element\Group\WidgetPosition;
use Nextend\SmartSlider3\Widget\Autoplay\AbstractWidgetAutoplay;
class AutoplayImage extends AbstractWidgetAutoplay {
protected $defaults = array(
'widget-autoplay-desktop-image-width' => 16,
'widget-autoplay-tablet-image-width' => 16,
'widget-autoplay-mobile-image-width' => 8,
'widget-autoplay-play-image' => '',
'widget-autoplay-play-color' =>
'ffffffcc',
'widget-autoplay-play' =>
'$ss$/plugins/widgetautoplay/image/image/play/small-light.svg',
'widget-autoplay-style' =>
'{"data":[{"backgroundcolor":"000000ab","padding":"10|*|10|*|10|*|10|*|px","boxshadow":"0|*|0|*|0|*|0|*|000000ff","border":"0|*|solid|*|000000ff","borderradius":"3","extra":""},{"backgroundcolor":"000000ab"}]}',
'widget-autoplay-position-mode' =>
'simple',
'widget-autoplay-position-area' => 4,
'widget-autoplay-position-offset' => 15,
'widget-autoplay-mirror' => 1,
'widget-autoplay-pause-image' => '',
'widget-autoplay-pause-color' =>
'ffffffcc',
'widget-autoplay-pause' =>
'$ss$/plugins/widgetautoplay/image/image/pause/small-light.svg'
);
public function renderFields($container) {
$rowIcon = new FieldsetRow($container,
'widget-autoplay-image-row-icon');
$fieldPlay = new ImageListFromFolder($rowIcon,
'widget-autoplay-play', n2_('Play'), '',
array(
'folder' => self::getAssetsPath() .
'/play/',
'hasDisabled' => false
));
new FieldImage($fieldPlay, 'widget-autoplay-play-image',
n2_('Custom'), '', array(
'relatedFieldsOff' => array(
'sliderwidget-autoplay-play-color'
)
));
new Color($rowIcon, 'widget-autoplay-play-color',
n2_('Color'), '', array(
'alpha' => true
));
new Style($rowIcon, 'widget-autoplay-style',
n2_('Style'), '', array(
'mode' => 'button',
'preview' =>
'SmartSliderAdminWidgetAutoplayImage'
));
new OnOff($rowIcon, 'widget-autoplay-mirror',
n2_('Mirror'), '', array(
'relatedFieldsOff' => array(
'sliderwidget-autoplay-pause',
'sliderwidget-autoplay-pause-color'
)
));
$fieldPause = new ImageListFromFolder($rowIcon,
'widget-autoplay-pause', n2_('Pause'), '',
array(
'folder' => self::getAssetsPath() .
'/pause/',
'post' => 'break'
));
new FieldImage($fieldPause,
'widget-autoplay-pause-image', n2_('Custom'),
'', array(
'relatedFieldsOff' => array(
'sliderwidget-autoplay-pause-color-grouping'
)
));
$groupingPauseColor = new Grouping($rowIcon,
'widget-autoplay-pause-color-grouping');
new Color($groupingPauseColor,
'widget-autoplay-pause-color', n2_('Color'),
'', array(
'alpha' => true
));
$row2 = new FieldsetRow($container,
'widget-autoplay-image-row-2');
new Number($row2, 'widget-autoplay-desktop-image-width',
n2_('Image width - Desktop'), '', array(
'wide' => 4,
'unit' => 'px'
));
new Number($row2, 'widget-autoplay-tablet-image-width',
n2_('Image width - Tablet'), '', array(
'wide' => 4,
'unit' => 'px'
));
new Number($row2, 'widget-autoplay-mobile-image-width',
n2_('Image width - Mobile'), '', array(
'wide' => 4,
'unit' => 'px'
));
new WidgetPosition($row2, 'widget-autoplay-position',
n2_('Position'));
}
public function prepareExport($export, $params) {
$export->addImage($params->get($this->key .
'play-image', ''));
$export->addImage($params->get($this->key .
'pause-image', ''));
$export->addVisual($params->get($this->key .
'style'));
}
public function prepareImport($import, $params) {
$params->set($this->key . 'play-image',
$import->fixImage($params->get($this->key .
'play-image', '')));
$params->set($this->key . 'pause-image',
$import->fixImage($params->get($this->key .
'pause-image', '')));
$params->set($this->key . 'style',
$import->fixSection($params->get($this->key . 'style',
'')));
}
}PK;e�[��G��7Widget/Autoplay/AutoplayImage/AutoplayImageFrontend.phpnu�[���<?php
namespace Nextend\SmartSlider3\Widget\Autoplay\AutoplayImage;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\Cast;
use Nextend\Framework\FastImageSize\FastImageSize;
use Nextend\Framework\Filesystem\Filesystem;
use Nextend\Framework\Misc\Base64;
use Nextend\Framework\Parser\Color;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Widget\AbstractWidgetFrontend;
class AutoplayImageFrontend extends AbstractWidgetFrontend {
public function __construct($sliderWidget, $widget, $params) {
parent::__construct($sliderWidget, $widget, $params);
$this->addToPlacement($this->key . 'position-',
array(
$this,
'render'
));
}
public function render($attributes = array()) {
$slider = $this->slider;
$id = $this->slider->elementId;
$params = $this->params;
if (!$params->get('autoplay', 0)) {
return '';
}
$sizeAttributes = array();
$html = '';
$playImage = $params->get($this->key .
'play-image');
$playValue = $params->get($this->key . 'play');
$playColor = $params->get($this->key .
'play-color');
if (empty($playImage)) {
if ($playValue == -1) {
$play = null;
} else {
$play =
ResourceTranslator::pathToResource(self::getAssetsPath() .
'/play/' . basename($playValue));
}
} else {
$play = $playImage;
}
if ($params->get($this->key . 'mirror')) {
$pauseColor = $playColor;
if (!empty($playImage)) {
$pause = $playImage;
} else {
$pause =
ResourceTranslator::pathToResource(self::getAssetsPath() .
'/pause/' . basename($playValue));
}
} else {
$pause = $params->get($this->key .
'pause-image');
$pauseColor = $params->get($this->key .
'pause-color');
if (empty($pause)) {
$pauseValue = $params->get($this->key .
'pause');
if ($pauseValue == -1) {
$pause = null;
} else {
$pause =
ResourceTranslator::pathToResource(self::getAssetsPath() .
'/pause/' . basename($pauseValue));
}
}
}
$ext = pathinfo($play, PATHINFO_EXTENSION);
if ($ext == 'svg' &&
ResourceTranslator::isResource($play)) {
FastImageSize::initAttributes($playColor, $sizeAttributes);
list($color, $opacity) = Color::colorToSVG($playColor);
$play = 'data:image/svg+xml;base64,' .
Base64::encode(str_replace(array(
'fill="#FFF"',
'opacity="1"'
), array(
'fill="#' . $color . '"',
'opacity="' . $opacity .
'"'
),
Filesystem::readFile(ResourceTranslator::toPath($play))));
} else {
FastImageSize::initAttributes($play, $sizeAttributes);
$play = ResourceTranslator::toUrl($play);
}
$ext = pathinfo($pause, PATHINFO_EXTENSION);
if ($ext == 'svg' &&
ResourceTranslator::isResource($pause)) {
list($color, $opacity) = Color::colorToSVG($pauseColor);
$pause = 'data:image/svg+xml;base64,' .
Base64::encode(str_replace(array(
'fill="#FFF"',
'opacity="1"'
), array(
'fill="#' . $color . '"',
'opacity="' . $opacity .
'"'
),
Filesystem::readFile(ResourceTranslator::toPath($pause))));
} else {
$pause = ResourceTranslator::toUrl($pause);
}
if ($play && $pause) {
$desktopWidth =
$params->get('widget-autoplay-desktop-image-width');
$tabletWidth =
$params->get('widget-autoplay-tablet-image-width');
$mobileWidth =
$params->get('widget-autoplay-mobile-image-width');
$slider->addDeviceCSS('all', 'div#' .
$id . ' .nextend-autoplay img{width: ' . $desktopWidth .
'px}');
if ($tabletWidth != $desktopWidth) {
$slider->addDeviceCSS('tabletportrait',
'div#' . $id . ' .nextend-autoplay img{width: ' .
$tabletWidth . 'px}');
$slider->addDeviceCSS('tabletlandscape',
'div#' . $id . ' .nextend-autoplay img{width: ' .
$tabletWidth . 'px}');
}
if ($mobileWidth != $desktopWidth) {
$slider->addDeviceCSS('mobileportrait',
'div#' . $id . ' .nextend-autoplay img{width: ' .
$mobileWidth . 'px}');
$slider->addDeviceCSS('mobilelandscape',
'div#' . $id . ' .nextend-autoplay img{width: ' .
$mobileWidth . 'px}');
}
$slider->addLess(self::getAssetsPath() .
'/style.n2less', array(
"sliderid" => $slider->elementId
));
Js::addStaticGroup(self::getAssetsPath() .
'/dist/w-autoplay.min.js', 'w-autoplay');
$displayAttributes = $this->getDisplayAttributes($params,
$this->key, 1);
$styleClass =
$slider->addStyle($params->get($this->key . 'style'),
'heading');
$slider->features->addInitCallback('new
_N2.SmartSliderWidgetAutoplayImage(this, ' .
Cast::floatToString($params->get($this->key .
'responsive-desktop')) . ', ' .
Cast::floatToString($params->get($this->key .
'responsive-tablet')) . ', ' .
Cast::floatToString($params->get($this->key .
'responsive-mobile')) . ');');
$slider->sliderType->addJSDependency('SmartSliderWidgetAutoplayImage');
$html = Html::tag('div',
Html::mergeAttributes($attributes, $displayAttributes, array(
'class' => $styleClass .
'nextend-autoplay n2-ow-all nextend-autoplay-image',
'role' => 'button',
'aria-label' => n2_('Play
autoplay'),
'data-pause-label' => n2_('Pause
autoplay'),
'data-play-label' => n2_('Play
autoplay'),
'tabindex' => '0'
)), Html::image($play, 'Play', $sizeAttributes +
HTML::addExcludeLazyLoadAttributes(array(
'class' =>
'nextend-autoplay-play'
))) . Html::image($pause, 'Pause',
$sizeAttributes + HTML::addExcludeLazyLoadAttributes(array(
'class' =>
'nextend-autoplay-pause'
))));
}
return $html;
}
}PK;e�[u_,L��
Widget/Bar/AbstractWidgetBar.phpnu�[���<?php
namespace Nextend\SmartSlider3\Widget\Bar;
use Nextend\SmartSlider3\Widget\AbstractWidget;
abstract class AbstractWidgetBar extends AbstractWidget {
protected $key = 'widget-bar-';
}PK;e�[�oM��*Widget/Bar/BarHorizontal/BarHorizontal.phpnu�[���<?php
namespace Nextend\SmartSlider3\Widget\Bar\BarHorizontal;
use Nextend\Framework\Form\Element\Font;
use Nextend\Framework\Form\Element\Grouping;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Style;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Fieldset\FieldsetRow;
use Nextend\SmartSlider3\Form\Element\Group\WidgetPosition;
use Nextend\SmartSlider3\Widget\Bar\AbstractWidgetBar;
class BarHorizontal extends AbstractWidgetBar {
protected $defaults = array(
'widget-bar-position-mode' => 'simple',
'widget-bar-position-area' => 10,
'widget-bar-position-offset' => 30,
'widget-bar-style' =>
'{"data":[{"backgroundcolor":"000000ab","padding":"5|*|20|*|5|*|20|*|px","boxshadow":"0|*|0|*|0|*|0|*|000000ff","border":"0|*|solid|*|000000ff","borderradius":"40","extra":""}]}',
'widget-bar-show-title' => 1,
'widget-bar-font-title' =>
'{"data":[{"color":"ffffffff","size":"14||px","tshadow":"0|*|0|*|0|*|000000c7","afont":"Montserrat","lineheight":"1.3","bold":0,"italic":0,"underline":0,"align":"left","extra":"vertical-align:
middle;"},{"color":"fc2828ff","afont":"Raleway,Arial","size":"25||px"},{}]}',
'widget-bar-show-description' => 1,
'widget-bar-font-description' =>
'{"data":[{"color":"ffffffff","size":"14||px","tshadow":"0|*|0|*|0|*|000000c7","afont":"Montserrat","lineheight":"1.3","bold":0,"italic":1,"underline":0,"align":"left","extra":"vertical-align:
middle;"},{"color":"fc2828ff","afont":"Raleway,Arial","size":"25||px"},{}]}',
'widget-bar-slide-count' => 0,
'widget-bar-width' => '100%',
'widget-bar-full-width' => 0,
'widget-bar-separator' => ' - ',
'widget-bar-align' => 'center',
'widget-bar-animate' => 0
);
public function renderFields($container) {
$row1 = new FieldsetRow($container,
'widget-bar-horizontal-row-1');
new WidgetPosition($row1, 'widget-bar-position',
n2_('Position'));
new OnOff($row1, 'widget-bar-animate',
n2_('Animate'));
new Style($row1, 'widget-bar-style',
n2_('Bar'), '', array(
'mode' => 'simple',
'font' =>
'sliderwidget-bar-font-title',
'font2' =>
'sliderwidget-bar-font-description',
'preview' =>
'SmartSliderAdminWidgetBarHorizontal'
));
$rowTitle = new FieldsetRow($container,
'widget-bar-horizontal-row-title');
new OnOff($rowTitle, 'widget-bar-show-title',
n2_('Title'), 0, array(
'relatedFieldsOn' => array(
'sliderwidget-bar-font-title',
'sliderwidget-bar-slide-count-container'
)
));
new Font($rowTitle, 'widget-bar-font-title',
'', '', array(
'mode' => 'simple',
'style' => 'sliderwidget-bar-style',
'preview' =>
'SmartSliderAdminWidgetBarHorizontal'
));
$rowDescription = new FieldsetRow($container,
'widget-bar-horizontal-row-description');
new OnOff($rowDescription, 'widget-bar-show-description',
n2_('Description'), 0, array(
'relatedFieldsOn' => array(
'sliderwidget-bar-font-description',
'sliderwidget-bar-slide-count'
)
));
new Font($rowDescription, 'widget-bar-font-description',
'', '', array(
'mode' => 'simple',
'style' => 'sliderwidget-bar-style',
'preview' =>
'SmartSliderAdminWidgetBarHorizontal'
));
$row4 = new FieldsetRow($container,
'widget-bar-horizontal-row-4');
$slideCountContainer = new Grouping($row4,
'widget-bar-slide-count-container');
new OnOff($slideCountContainer, 'widget-bar-slide-count',
n2_('Slide count'), 0, array(
'tipLabel' => n2_('Slide count'),
'tipDescription' => n2_('The
"Title" will be the index of the slide and
"Description" will be the total number of slides.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1856-text-bar#slide-count'
));
new Text($row4, 'widget-bar-width',
n2_('Width'), '');
new OnOff($row4, 'widget-bar-full-width', n2_('Full
width'));
new Text($row4, 'widget-bar-separator',
n2_('Separator'), 0, array(
'tipLabel' => n2_('Separator'),
'tipDescription' => sprintf(n2_('You can set
what separates the Tex bar Title and Description. This separator is used at
the Slide count option, too, to separate the current and total slide
number. %1$s To put the Description to a new line, use the
<br> HTML tag.'), '<br>'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1856-text-bar#separator'
));
new Select($row4, 'widget-bar-align',
n2_('Align'), '', array(
'options' => array(
'left' => n2_('Left'),
'center' => n2_('Center'),
'right' => n2_('Right')
)
));
}
public function prepareExport($export, $params) {
$export->addVisual($params->get($this->key .
'style'));
$export->addVisual($params->get($this->key .
'font-title'));
$export->addVisual($params->get($this->key .
'font-description'));
}
public function prepareImport($import, $params) {
$params->set($this->key . 'style',
$import->fixSection($params->get($this->key . 'style',
'')));
$params->set($this->key . 'font-title',
$import->fixSection($params->get($this->key .
'font-title', '')));
$params->set($this->key . 'font-description',
$import->fixSection($params->get($this->key .
'font-description', '')));
}
}PK;e�[�M�XX2Widget/Bar/BarHorizontal/BarHorizontalFrontend.phpnu�[���<?php
namespace Nextend\SmartSlider3\Widget\Bar\BarHorizontal;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Widget\AbstractWidgetFrontend;
class BarHorizontalFrontend extends AbstractWidgetFrontend {
public function __construct($sliderWidget, $widget, $params) {
parent::__construct($sliderWidget, $widget, $params);
if (intval($params->get($this->key .
'show-description'))) {
$this->slider->exposeSlideData['description'] =
true;
}
$this->addToPlacement($this->key . 'position-',
array(
$this,
'render'
));
}
public function render($attributes = array()) {
$slider = $this->slider;
$id = $this->slider->elementId;
$params = $this->params;
$slider->addLess(self::getAssetsPath() .
'/style.n2less', array(
"sliderid" => $slider->elementId
));
Js::addStaticGroup(self::getAssetsPath() .
'/dist/w-bar-horizontal.min.js', 'w-bar-horizontal');
$displayAttributes = $this->getDisplayAttributes($params,
$this->key, 1);
$styleClass = $slider->addStyle($params->get($this->key .
'style'), 'simple');
$fontTitle =
$slider->addFont($params->get($this->key .
'font-title'), 'simple');
$fontDescription =
$slider->addFont($params->get($this->key .
'font-description'), 'simple');
$style = 'text-align: ' . $params->get($this->key .
'align') . ';';
$width = $params->get($this->key . 'width');
if (is_numeric($width) || substr($width, -1) == '%' ||
substr($width, -2) == 'px') {
$style .= 'width:' . $width . ';';
}
$innerStyle = '';
if (!$params->get($this->key . 'full-width')) {
$innerStyle = 'display: inline-block;';
}
$showTitle = intval($params->get($this->key .
'show-title'));
$showDescription = intval($params->get($this->key .
'show-description'));
$parameters = array(
'area' =>
intval($params->get($this->key . 'position-area')),
'animate' =>
intval($params->get($this->key . 'animate')),
'showTitle' => $showTitle,
'fontTitle' => $fontTitle,
'slideCount' =>
intval($params->get($this->key . 'slide-count', 0)),
'showDescription' => $showDescription,
'fontDescription' => $fontDescription,
'separator' => $params->get($this->key
. 'separator')
);
$slider->features->addInitCallback('new
_N2.SmartSliderWidgetBarHorizontal(this, ' . json_encode($parameters)
. ');');
$slider->sliderType->addJSDependency('SmartSliderWidgetBarHorizontal');
return Html::tag("div",
Html::mergeAttributes($attributes, $displayAttributes, array(
"class" => "nextend-bar
nextend-bar-horizontal n2-ss-widget-hidden n2-ow-all",
"style" => $style
)), Html::tag("div", array(
"class" => $styleClass,
"style" => $innerStyle
), '<span class="' . $fontTitle .
'"> </span>'));
}
}PK;e�[*K�**
Widget/Bullet/AbstractBullet.phpnu�[���<?php
namespace Nextend\SmartSlider3\Widget\Bullet;
use Nextend\SmartSlider3\Widget\AbstractWidget;
abstract class AbstractBullet extends AbstractWidget {
protected $key = 'widget-bullet-';
public function getCommonAssetsPath() {
return dirname(__FILE__) . '/Assets';
}
}PK;e�[&��xx(Widget/Bullet/AbstractBulletFrontend.phpnu�[���<?php
namespace Nextend\SmartSlider3\Widget\Bullet;
use Nextend\Framework\Platform\Platform;
use Nextend\Framework\Url\Url;
use Nextend\SmartSlider3\Widget\AbstractWidgetFrontend;
abstract class AbstractBulletFrontend extends AbstractWidgetFrontend {
public function __construct($sliderWidget, $widget, $params) {
parent::__construct($sliderWidget, $widget, $params);
if ($params->get($this->key .
'thumbnail-show-image')) {
$this->slider->exposeSlideData['thumbnail'] =
true;
}
$this->addToPlacement($this->key . 'position-',
array(
$this,
'render'
));
}
public function getCommonAssetsUri() {
return Url::pathToUri($this->getCommonAssetsPath());
}
public function getCommonAssetsPath() {
return Platform::filterAssetsPath(dirname(__FILE__) .
'/Assets');
}
}PK;e�[�Q�
��3Widget/Bullet/BulletTransition/BulletTransition.phpnu�[���<?php
namespace Nextend\SmartSlider3\Widget\Bullet\BulletTransition;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Style;
use Nextend\Framework\Form\Fieldset\FieldsetRow;
use Nextend\SmartSlider3\Form\Element\Group\WidgetPosition;
use Nextend\SmartSlider3\Widget\Bullet\AbstractBullet;
class BulletTransition extends AbstractBullet {
protected $defaults = array(
'widget-bullet-position-mode' =>
'simple',
'widget-bullet-position-area' => 10,
'widget-bullet-position-offset' => 10,
'widget-bullet-action' =>
'click',
'widget-bullet-style' =>
'{"data":[{"backgroundcolor":"000000ab","padding":"5|*|5|*|5|*|5|*|px","boxshadow":"0|*|0|*|0|*|0|*|000000ff","border":"0|*|solid|*|000000ff","borderradius":"50","extra":"margin:
4px;"},{"backgroundcolor":"1D81F9FF"}]}',
'widget-bullet-bar' => '',
'widget-bullet-align' =>
'center',
'widget-bullet-orientation' =>
'auto',
'widget-bullet-bar-full-size' => 0,
'widget-bullet-thumbnail-show-image' => 0,
'widget-bullet-thumbnail-width' => 60,
'widget-bullet-thumbnail-style' =>
'{"data":[{"backgroundcolor":"00000080","padding":"3|*|3|*|3|*|3|*|px","boxshadow":"0|*|0|*|0|*|0|*|000000ff","border":"0|*|solid|*|000000ff","borderradius":"3","extra":"margin:
5px;"}]}',
'widget-bullet-thumbnail-side' =>
'before'
);
public function renderFields($container) {
$row1 = new FieldsetRow($container,
'widget-bullet-transition-row-1');
new WidgetPosition($row1, 'widget-bullet-position',
n2_('Position'));
new Select($row1, 'widget-bullet-action',
n2_('Action'), '', array(
'options' => array(
'click' => n2_('Click'),
'mouseenter' => n2_('Hover')
)
));
$row2 = new FieldsetRow($container,
'widget-bullet-transition-row-2');
new Style($row2, 'widget-bullet-style',
n2_('Dot'), '', array(
'mode' => 'dot',
'style2' => 'sliderwidget-bullet-bar',
'preview' =>
'SmartSliderAdminWidgetBulletTransition'
));
new Style($row2, 'widget-bullet-bar',
n2_('Bar'), '', array(
'mode' => 'simple',
'style2' =>
'sliderwidget-bullet-style',
'preview' =>
'SmartSliderAdminWidgetBulletTransition'
));
new OnOff($row2, 'widget-bullet-bar-full-size',
n2_('Bar full size'), '', array(
'relatedFieldsOn' => array(
'sliderwidget-bullet-align'
)
));
new Select($row2, 'widget-bullet-align',
n2_('Align'), '', array(
'options' => array(
'left' => n2_('Left'),
'center' => n2_('Center'),
'right' => n2_('Right')
)
));
new Select($row2, 'widget-bullet-orientation',
n2_('Orientation'), '', array(
'options' => array(
'auto' => n2_('Auto'),
'horizontal' => n2_('Horizontal'),
'vertical' => n2_('Vertical')
)
));
}
public function prepareExport($export, $params) {
$export->addVisual($params->get($this->key .
'style'));
$export->addVisual($params->get($this->key .
'bar'));
}
public function prepareImport($import, $params) {
$params->set($this->key . 'style',
$import->fixSection($params->get($this->key .
'style')));
$params->set($this->key . 'bar',
$import->fixSection($params->get($this->key . 'bar')));
}
}PK;e�[�ڻ�;Widget/Bullet/BulletTransition/BulletTransitionFrontend.phpnu�[���<?php
namespace Nextend\SmartSlider3\Widget\Bullet\BulletTransition;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Widget\Bullet\AbstractBulletFrontend;
class BulletTransitionFrontend extends AbstractBulletFrontend {
public function render($attributes = array()) {
$slider = $this->slider;
$id = $this->slider->elementId;
$params = $this->params;
if ($slider->getSlidesCount() <= 1) {
return '';
}
$slider->addLess(self::getAssetsPath() .
'/style.n2less', array(
"sliderid" => $slider->elementId
));
Js::addStaticGroup($this->getCommonAssetsPath() .
'/dist/w-bullet.min.js', 'w-bullet');
$displayAttributes = $this->getDisplayAttributes($params,
$this->key, 1);
$bulletStyle = $slider->addStyle($params->get($this->key .
'style'), 'dot');
$barStyle = $slider->addStyle($params->get($this->key .
'bar'), 'simple');
$orientation =
$this->getOrientationByPosition($params->get($this->key .
'position-mode'), $params->get($this->key .
'position-area'), $params->get($this->key .
'orientation'), 'horizontal');
$parameters = array(
'area' =>
intval($params->get($this->key . 'position-area')),
'dotClasses' => $bulletStyle,
'mode' => '',
'action' => $params->get($this->key .
'action')
);
if ($params->get($this->key .
'thumbnail-show-image')) {
$parameters['thumbnail'] = 1;
$parameters['thumbnailWidth'] =
intval($params->get($this->key . 'thumbnail-width'));
$parameters['thumbnailHeight'] =
intval($params->get($this->key . 'thumbnail-height'));
$parameters['thumbnailStyle'] =
$slider->addStyle($params->get($this->key .
'thumbnail-style'), 'simple', '');
$side = $params->get($this->key
. 'thumbnail-side');
if ($side == 'before') {
if ($orientation == 'vertical') {
$position = 'left';
} else {
$position = 'top';
}
} else {
if ($orientation == 'vertical') {
$position = 'right';
} else {
$position = 'bottom';
}
}
$parameters['thumbnailPosition'] = $position;
}
$slider->features->addInitCallback('new
_N2.SmartSliderWidgetBulletTransition(this, ' .
json_encode($parameters) . ');');
$slider->sliderType->addJSDependency('SmartSliderWidgetBulletTransition');
$fullSize = intval($params->get($this->key .
'bar-full-size'));
return Html::tag("div",
Html::mergeAttributes($attributes, $displayAttributes, array(
"class" => 'n2-ss-control-bullet n2-ow-all
n2-ss-control-bullet-' . $orientation . ($fullSize ? '
n2-ss-control-bullet-fullsize' : '')
)), Html::tag("div", array(
"class" => $barStyle . " nextend-bullet-bar
n2-bar-justify-content-" . $params->get($this->key .
'align')
), '<div class="n2-bullet ' . $bulletStyle .
'" style="visibility:hidden;"></div>'));
}
}PK;e�[��W�44$Widget/Group/AbstractWidgetGroup.phpnu�[���<?php
namespace Nextend\SmartSlider3\Widget\Group;
use Nextend\Framework\Form\ContainerInterface;
use Nextend\Framework\Form\Element\CheckboxOnOff;
use Nextend\Framework\Form\Element\Group\GroupCheckboxOnOff;
use Nextend\Framework\Form\Form;
use Nextend\Framework\Pattern\OrderableTrait;
use Nextend\SmartSlider3\Widget\AbstractWidget;
use Nextend\SmartSlider3\Widget\WidgetGroupFactory;
abstract class AbstractWidgetGroup {
use OrderableTrait;
/** @var AbstractWidget[] */
private $widgets = array();
protected $showOnMobileDefault = 0;
public function __construct() {
WidgetGroupFactory::addGroup($this);
}
public abstract function getName();
public abstract function getLabel();
/**
* @param $name
* @param AbstractWidget $widget
*/
public function addWidget($name, $widget) {
$this->widgets[$name] = $widget;
}
/**
* @return AbstractWidget[]
*/
public function getWidgets() {
return $this->widgets;
}
/**
* @param $name
*
* @return AbstractWidget
*/
public function getWidget($name) {
return $this->widgets[$name];
}
/**
* @param ContainerInterface $container
*/
abstract public function renderFields($container);
/**
* @param Form $form
*/
protected function compatibility($form) {
$name = $this->getName();
/**
* Convert to the new control form with the enable field
*/
if (!$form->has('widget-' . $name .
'-enabled')) {
if ($form->get('widget' . $name,
'disabled') !== 'disabled') {
$form->set('widget-' . $name .
'-enabled', 1);
} else {
$form->set('widget-' . $name .
'-enabled', 0);
}
}
$widgets = $this->getWidgets();
$widgetPreset = $form->get('widget' . $name);
if (!isset($widgets[$widgetPreset])) {
$widgetPreset = key($widgets);
$form->set('widget' . $name, $widgetPreset);
}
$widget = $widgets[$widgetPreset];
$form->fillDefault($widget->getDefaults());
}
protected function addHideOnFeature($key, $row) {
$groupShowOn = new GroupCheckboxOnOff($row, $key, n2_('Hide
on'));
new CheckboxOnOff($groupShowOn, $key . 'mobileportrait',
false, 'ssi_16 ssi_16--mobileportrait',
$this->showOnMobileDefault, array(
'invert' => true,
'checkboxTip' => n2_('Mobile')
));
new CheckboxOnOff($groupShowOn, $key . 'mobilelandscape',
false, 'ssi_16 ssi_16--mobileportraitlarge',
$this->showOnMobileDefault, array(
'invert' => true,
'checkboxTip' => n2_('Large mobile'),
'rowClass' =>
'n2-slider-settings-require--mobilelandscape'
));
new CheckboxOnOff($groupShowOn, $key . 'tabletportrait',
false, 'ssi_16 ssi_16--tabletportrait', 1, array(
'invert' => true,
'checkboxTip' => n2_('Tablet')
));
new CheckboxOnOff($groupShowOn, $key . 'tabletlandscape',
false, 'ssi_16 ssi_16--tabletportraitlarge', 1, array(
'invert' => true,
'checkboxTip' => n2_('Large tablet'),
'rowClass' =>
'n2-slider-settings-require--tabletlandscape'
));
new CheckboxOnOff($groupShowOn, $key . 'desktopportrait',
false, 'ssi_16 ssi_16--desktopportrait', 1, array(
'invert' => true,
'checkboxTip' => n2_('Desktop')
));
new CheckboxOnOff($groupShowOn, $key .
'desktoplandscape', false, 'ssi_16
ssi_16--desktoplandscape', 1, array(
'invert' => true,
'checkboxTip' => n2_('Large desktop'),
'rowClass' =>
'n2-slider-settings-require--desktoplandscape'
));
}
}PK;e�[`;
�Widget/Group/Arrow.phpnu�[���<?php
namespace Nextend\SmartSlider3\Widget\Group;
use Nextend\Framework\Form\Container\ContainerTab;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Pattern\PluggableTrait;
use Nextend\SmartSlider3\Form\Element\ControlTypePicker;
use Nextend\SmartSlider3\Widget\Arrow\ArrowImage\ArrowImage;
class Arrow extends AbstractWidgetGroup {
use PluggableTrait;
public $ordering = 1;
public function __construct() {
parent::__construct();
new ArrowImage($this, 'imageSmallRectangle', array(
'widget-arrow-desktop-image-width' => 26,
'widget-arrow-tablet-image-width' => 26,
'widget-arrow-previous' =>
'$ss$/plugins/widgetarrow/image/image/previous/full.svg',
'widget-arrow-next' =>
'$ss$/plugins/widgetarrow/image/image/next/full.svg',
'widget-arrow-style' =>
'{"data":[{"backgroundcolor":"000000ab","padding":"2|*|2|*|2|*|2|*|px","boxshadow":"0|*|0|*|0|*|0|*|000000ff","border":"0|*|solid|*|000000ff","borderradius":"3","extra":""},{"backgroundcolor":"FF9139FF"}]}'
));
new ArrowImage($this, 'imageEmpty', array(
'widget-arrow-previous' =>
'$ss$/plugins/widgetarrow/image/image/previous/thin-horizontal.svg',
'widget-arrow-next' =>
'$ss$/plugins/widgetarrow/image/image/next/thin-horizontal.svg',
'widget-arrow-style' => ''
));
$this->makePluggable('SliderWidgetArrow');
}
public function getName() {
return 'arrow';
}
public function getLabel() {
return n2_('Arrows');
}
/**
* @param ContainerTab $container
*/
public function renderFields($container) {
$form = $container->getForm();
$this->compatibility($form);
/**
* Used for field removal: /controls/widget-arrow
*/
$table = new ContainerTable($container, 'widget-arrow',
n2_('Arrow'));
new OnOff($table->getFieldsetLabel(),
'widget-arrow-enabled', false, 0, array(
'relatedFieldsOn' => array(
'table-rows-widget-arrow'
)
));
$row1 = $table->createRow('widget-arrow-1');
$ajaxUrl =
$form->createAjaxUrl(array("slider/renderwidgetarrow"));
new ControlTypePicker($row1, 'widgetarrow', $table,
$ajaxUrl, $this, 'imageEmpty');
$row2 = $table->createRow('widget-arrow-2');
new OnOff($row2, 'widget-arrow-display-hover',
n2_('Shows on hover'), 0);
$this->addHideOnFeature('widget-arrow-display-',
$row2);
new Text($row2, 'widget-arrow-exclude-slides',
n2_('Hide on slides'), '', array(
'tipLabel' => n2_('Hide on
slides'),
'tipDescription' => n2_('List the slides
separated by commas on which you want the controls to be hidden.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1782-arrow#hide-on-slides'
));
}
}PK;e�['�*qbbWidget/Group/Autoplay.phpnu�[���<?php
namespace Nextend\SmartSlider3\Widget\Group;
use Nextend\Framework\Data\Data;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Parser\Common;
use Nextend\Framework\Pattern\PluggableTrait;
use Nextend\SmartSlider3\Form\Element\ControlTypePicker;
use Nextend\SmartSlider3\Widget\Autoplay\AutoplayImage\AutoplayImage;
class Autoplay extends AbstractWidgetGroup {
use PluggableTrait;
public $ordering = 3;
protected $showOnMobileDefault = 1;
public function __construct() {
parent::__construct();
new AutoplayImage($this, 'image');
$this->makePluggable('SliderWidgetAutoplay');
}
public function getName() {
return 'autoplay';
}
public function getLabel() {
return n2_('Autoplay');
}
public function renderFields($container) {
$form = $container->getForm();
$this->compatibility($form);
$autoplayFinish = $form->get('autoplayfinish');
if (!$form->has('autoplayLoop') &&
!empty($autoplayFinish)) {
$this->upgradeData($form);
}
$table = new ContainerTable($container,
'widget-autoplay', n2_('Button'));
new OnOff($table->getFieldsetLabel(),
'widget-autoplay-enabled', false, 0, array(
'relatedFieldsOn' => array(
'table-rows-widget-autoplay'
)
));
$row1 = $table->createRow('widget-bullet-1');
$url =
$form->createAjaxUrl(array("slider/renderwidgetautoplay"));
new ControlTypePicker($row1, 'widgetautoplay', $table,
$url, $this, 'image');
$row2 = $table->createRow('widget-bullet-2');
new OnOff($row2, 'widget-autoplay-display-hover',
n2_('Shows on hover'), 0);
$this->addHideOnFeature('widget-autoplay-display-',
$row2);
new Text($row2, 'widget-autoplay-exclude-slides',
n2_('Hide on slides'), '', array(
'tipLabel' => n2_('Hide on
slides'),
'tipDescription' => n2_('List the slides
separated by commas on which you want the controls to be hidden.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1807-slider-settings-autoplay#hide-on-slides'
));
}
/**
* For compatibility with legacy autoplay values.
*
* @param Data $data
*/
protected function upgradeData($data) {
if (!$data->has('autoplayLoop')) {
list($interval, $intervalModifier, $intervalSlide) =
(array)Common::parse($data->get('autoplayfinish',
'1|*|loop|*|current'));
if ($interval <= 0) {
// 0|*|slide|*|current -> In old versions it brought to
the Next slide.
if ($interval <= 0 && $intervalModifier ===
'slide' && $intervalSlide === 'next') {
$data->set('autoplayfinish',
'1|*|slide|*|current');
$data->set('autoplayLoop', 0);
}
// 0|*|loop/slide/slideindex|*|current -> Infinite loop
// 0|*|loop|*|next -> Infinite loop
if ($intervalSlide === 'current' ||
($intervalModifier === 'loop' && $intervalSlide ===
'next')) {
$data->set('autoplayfinish',
'1|*|loop|*|current');
$data->set('autoplayLoop', 1);
}
// 0|*|slideindex|*|next -> In old versions it always
brought to the 2nd slide.
if ($intervalModifier === 'slideindex' &&
$intervalSlide === 'next') {
$data->set('autoplayfinish',
'2|*|slideindex|*|current');
$data->set('autoplayLoop', '0');
}
} else {
//next is not allowed for "slide" and
"slideindex" interval modifiers
if ($intervalModifier === 'slide' ||
$intervalModifier === 'slideindex') {
$data->set('autoplayfinish', $interval .
'|*|' . $intervalModifier . '|*|current');
}
// turn off Loop, and work with the original settings
$data->set('autoplayLoop', '0');
}
}
}
}PK;e�[5DV� � Widget/Group/Bar.phpnu�[���<?php
namespace Nextend\SmartSlider3\Widget\Group;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Pattern\PluggableTrait;
use Nextend\SmartSlider3\Form\Element\ControlTypePicker;
use Nextend\SmartSlider3\Widget\Bar\BarHorizontal\BarHorizontal;
class Bar extends AbstractWidgetGroup {
use PluggableTrait;
public $ordering = 5;
protected $showOnMobileDefault = 1;
public function __construct() {
parent::__construct();
new BarHorizontal($this, 'horizontal');
new BarHorizontal($this, 'horizontalFull', array(
'widget-bar-position-offset' => 0,
'widget-bar-style' =>
'{"data":[{"backgroundcolor":"000000ab","padding":"20|*|20|*|20|*|20|*|px","boxshadow":"0|*|0|*|0|*|0|*|000000ff","border":"0|*|solid|*|000000ff","borderradius":"0","extra":""}]}',
'widget-bar-full-width' => 1,
'widget-bar-align' => 'left'
));
$this->makePluggable('SliderWidgetBar');
}
public function getName() {
return 'bar';
}
public function getLabel() {
return n2_('Text bar');
}
public function renderFields($container) {
$form = $container->getForm();
$this->compatibility($form);
/**
* Used for field removal: /controls/widget-bar
*/
$table = new ContainerTable($container, 'widget-bar',
n2_('Text bar'));
new OnOff($table->getFieldsetLabel(),
'widget-bar-enabled', false, 0, array(
'relatedFieldsOn' => array(
'table-rows-widget-bar'
)
));
$row1 = $table->createRow('widget-bar-1');
$ajaxUrl =
$form->createAjaxUrl(array("slider/renderwidgetbar"));
new ControlTypePicker($row1, 'widgetbar', $table,
$ajaxUrl, $this, 'horizontal');
$row2 = $table->createRow('widget-bar-2');
new OnOff($row2, 'widget-bar-display-hover',
n2_('Shows on hover'), 0);
$this->addHideOnFeature('widget-bar-display-', $row2);
new Text($row2, 'widget-bar-exclude-slides',
n2_('Hide on slides'), '', array(
'tipLabel' => n2_('Hide on
slides'),
'tipDescription' => n2_('List the slides
separated by commas on which you want the controls to be hidden.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1856-text-bar#hide-on-slides'
));
}
}PK;e�[$T�fJJWidget/Group/Bullet.phpnu�[���<?php
namespace Nextend\SmartSlider3\Widget\Group;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Style;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Element\Text\NumberAutoComplete;
use Nextend\Framework\Pattern\PluggableTrait;
use Nextend\SmartSlider3\Form\Element\ControlTypePicker;
use Nextend\SmartSlider3\Widget\Bullet\BulletTransition\BulletTransition;
class Bullet extends AbstractWidgetGroup {
use PluggableTrait;
public $ordering = 2;
protected $showOnMobileDefault = 1;
public function __construct() {
parent::__construct();
new BulletTransition($this, 'transition');
$this->makePluggable('SliderWidgetBullet');
}
public function getName() {
return 'bullet';
}
public function getLabel() {
return n2_('Bullets');
}
public function renderFields($container) {
$form = $container->getForm();
$this->compatibility($form);
/**
* Used for field removal: /controls/widget-bullet
*/
$table = new ContainerTable($container, 'widget-bullet',
n2_('Bullet'));
new OnOff($table->getFieldsetLabel(),
'widget-bullet-enabled', false, 0, array(
'relatedFieldsOn' => array(
'table-rows-widget-bullet'
)
));
$row1 = $table->createRow('widget-bullet-1');
$url =
$form->createAjaxUrl(array("slider/renderwidgetbullet"));
new ControlTypePicker($row1, 'widgetbullet', $table,
$url, $this);
$row2 = $table->createRow('widget-bullet-2');
new OnOff($row2, 'widget-bullet-thumbnail-show-image',
n2_('Image'), 0, array(
'relatedFieldsOn' => array(
'sliderwidget-bullet-thumbnail-width',
'sliderwidget-bullet-thumbnail-height',
'sliderwidget-bullet-thumbnail-style',
'sliderwidget-bullet-thumbnail-side'
)
));
new NumberAutoComplete($row2,
'widget-bullet-thumbnail-width', n2_('Width'), 100,
array(
'unit' => 'px',
'values' => array(
60,
100,
150,
200
),
'wide' => 4
));
new NumberAutoComplete($row2,
'widget-bullet-thumbnail-height', n2_('Height'), 60,
array(
'unit' => 'px',
'values' => array(
60,
100,
150,
200
),
'wide' => 4
));
new Style($row2, 'widget-bullet-thumbnail-style',
n2_('Style'),
'{"data":[{"backgroundcolor":"00000080","padding":"3|*|3|*|3|*|3|*|px","boxshadow":"0|*|0|*|0|*|0|*|000000ff","border":"0|*|solid|*|000000ff","borderradius":"3","extra":"margin:
5px;background-size:cover;"}]}', array(
'mode' => 'simple',
'preview' =>
'SmartSliderAdminWidgetBulletThumbnail'
));
new Select($row2, 'widget-bullet-thumbnail-side',
n2_('Side'), 'before', array(
'options' => array(
'before' => n2_('Before'),
'after' => n2_('After')
)
));
$row3 = $table->createRow('widget-bullet-3');
new OnOff($row3, 'widget-bullet-display-hover',
n2_('Shows on hover'), 0);
$this->addHideOnFeature('widget-bullet-display-',
$row3);
new Text($row3, 'widget-bullet-exclude-slides',
n2_('Hide on slides'), '', array(
'tipLabel' => n2_('Hide on
slides'),
'tipDescription' => n2_('List the slides
separated by commas on which you want the controls to be hidden.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1804-bullet#hide-on-slides'
));
}
}PK;e�[_cV\\Widget/Group/Shadow.phpnu�[���<?php
namespace Nextend\SmartSlider3\Widget\Group;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Pattern\PluggableTrait;
use Nextend\SmartSlider3\Form\Element\ControlTypePicker;
use Nextend\SmartSlider3\Widget\Shadow\ShadowImage\ShadowImage;
class Shadow extends AbstractWidgetGroup {
use PluggableTrait;
public $ordering = 7;
public function __construct() {
parent::__construct();
new ShadowImage($this, 'shadow');
$this->makePluggable('SliderWidgetShadow');
}
public function getName() {
return 'shadow';
}
public function getLabel() {
return n2_('Shadow');
}
public function renderFields($container) {
$form = $container->getForm();
$this->compatibility($form);
$table = new ContainerTable($container, 'widgetshadow',
n2_('Shadow'));
new OnOff($table->getFieldsetLabel(),
'widget-shadow-enabled', false, 0, array(
'relatedFieldsOn' => array(
'table-rows-widgetshadow'
)
));
$row1 = $table->createRow('widget-shadow-1');
$url =
$form->createAjaxUrl(array("slider/renderwidgetshadow"));
new ControlTypePicker($row1, 'widgetshadow', $table,
$url, $this);
$row2 = $table->createRow('widget-shadow-2');
$this->addHideOnFeature('widget-shadow-display-',
$row2);
new Text($row2, 'widget-shadow-exclude-slides',
n2_('Hide on slides'), '', array(
'tipLabel' => n2_('Hide on
slides'),
'tipDescription' => n2_('List the slides
separated by commas on which you want the controls to be hidden.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1858-shadow#hide-on-slides'
));
}
}PK;e�[T)��ttWidget/Group/Thumbnail.phpnu�[���<?php
namespace Nextend\SmartSlider3\Widget\Group;
use Nextend\Framework\Form\Container\ContainerTab;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Element\Text\NumberAutoComplete;
use Nextend\Framework\Pattern\PluggableTrait;
use Nextend\SmartSlider3\Form\Element\ControlTypePicker;
use Nextend\SmartSlider3\Widget\Thumbnail\Basic\ThumbnailBasic;
class Thumbnail extends AbstractWidgetGroup {
use PluggableTrait;
public $ordering = 6;
public function __construct() {
parent::__construct();
new ThumbnailBasic($this, 'default');
$this->makePluggable('SliderWidgetThumbnail');
}
public function getName() {
return 'thumbnail';
}
public function getLabel() {
return n2_('Thumbnails');
}
/**
* @param ContainerTab $container
*/
public function renderFields($container) {
$form = $container->getForm();
$this->compatibility($form);
/**
* Used for field removal: /controls/widget-thumbnail
*/
$table = new ContainerTable($container,
'widget-thumbnail', n2_('Thumbnails'));
new OnOff($table->getFieldsetLabel(),
'widget-thumbnail-enabled', false, 0, array(
'relatedFieldsOn' => array(
'table-rows-widget-thumbnail'
)
));
$row1 = $table->createRow('widget-thumbnail-1');
$row2 = $table->createRow('widget-thumbnail-2');
new OnOff($row2, 'widget-thumbnail-show-image',
n2_('Image'), 1);
new NumberAutoComplete($row2, 'widget-thumbnail-width',
n2_('Desktop width'), 100, array(
'unit' => 'px',
'values' => array(
60,
100,
150,
200
),
'wide' => 4
));
new NumberAutoComplete($row2, 'widget-thumbnail-height',
n2_('Height'), 60, array(
'unit' => 'px',
'values' => array(
60,
100,
150,
200
),
'wide' => 4
));
new NumberAutoComplete($row2,
'widget-thumbnail-tablet-width', n2_('Tablet width'),
100, array(
'unit' => 'px',
'values' => array(
60,
100,
150,
200
),
'wide' => 4
));
new NumberAutoComplete($row2,
'widget-thumbnail-tablet-height', n2_('Height'), 60,
array(
'unit' => 'px',
'values' => array(
60,
100,
150,
200
),
'wide' => 4
));
new NumberAutoComplete($row2,
'widget-thumbnail-mobile-width', n2_('Mobile width'),
100, array(
'unit' => 'px',
'values' => array(
60,
100,
150,
200
),
'wide' => 4
));
new NumberAutoComplete($row2,
'widget-thumbnail-mobile-height', n2_('Height'), 60,
array(
'unit' => 'px',
'values' => array(
60,
100,
150,
200
),
'wide' => 4
));
$ajaxUrl =
$form->createAjaxUrl(array("slider/renderwidgetthumbnail"));
new ControlTypePicker($row1, 'widgetthumbnail', $table,
$ajaxUrl, $this, 'default');
$row3 = $table->createRow('widget-thumbnail-3');
new OnOff($row3, 'widget-thumbnail-display-hover',
n2_('Shows on hover'), 0);
$this->addHideOnFeature('widget-thumbnail-display-',
$row3);
new Text($row3, 'widget-thumbnail-exclude-slides',
n2_('Hide on slides'), '', array(
'tipLabel' => n2_('Hide on
slides'),
'tipDescription' => n2_('List the slides
separated by commas on which you want the controls to be hidden.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1857-thumbnails#hide-on-slides'
));
}
}PK;e�[j(ɲ��&Widget/Shadow/AbstractWidgetShadow.phpnu�[���<?php
namespace Nextend\SmartSlider3\Widget\Shadow;
use Nextend\SmartSlider3\Widget\AbstractWidget;
abstract class AbstractWidgetShadow extends AbstractWidget {
protected $key = 'widget-shadow-';
}PK;e�[��s���)Widget/Shadow/ShadowImage/ShadowImage.phpnu�[���<?php
namespace Nextend\SmartSlider3\Widget\Shadow\ShadowImage;
use Nextend\Framework\Form\Element\Radio\ImageListFromFolder;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Element\Text\FieldImage;
use Nextend\Framework\Form\Fieldset\FieldsetRow;
use Nextend\SmartSlider3\Widget\Shadow\AbstractWidgetShadow;
class ShadowImage extends AbstractWidgetShadow {
protected $defaults = array(
'widget-shadow-position-mode' => 'simple',
'widget-shadow-position-area' => 12,
'widget-shadow-position-stack' => 3,
'widget-shadow-shadow-image' => '',
'widget-shadow-shadow' =>
'$ss$/plugins/widgetshadow/shadow/shadow/shadow/dark.png'
);
public function renderFields($container) {
$row1 = new FieldsetRow($container,
'widget-shadow-row-1');
$fieldShadow = new ImageListFromFolder($row1,
'widget-shadow-shadow', n2_('Shadow'), '',
array(
'folder' => self::getAssetsPath() .
'/shadow/',
'width' => 582,
'column' => 1,
'hasDisabled' => false
));
new FieldImage($fieldShadow,
'widget-shadow-shadow-image', n2_('Custom'),
'');
}
public function prepareExport($export, $params) {
$export->addImage($params->get($this->key .
'shadow-image', ''));
}
public function prepareImport($import, $params) {
$params->set($this->key . 'shadow-image',
$import->fixImage($params->get($this->key .
'shadow-image', '')));
}
}PK;e�[m�1Pll1Widget/Shadow/ShadowImage/ShadowImageFrontend.phpnu�[���<?php
namespace Nextend\SmartSlider3\Widget\Shadow\ShadowImage;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\FastImageSize\FastImageSize;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Widget\AbstractWidgetFrontend;
class ShadowImageFrontend extends AbstractWidgetFrontend {
public function __construct($sliderWidget, $widget, $params) {
parent::__construct($sliderWidget, $widget, $params);
$this->addToPlacement($this->key . 'position-',
array(
$this,
'render'
));
}
public function render($attributes = array()) {
$slider = $this->slider;
$id = $this->slider->elementId;
$params = $this->params;
$shadow = $params->get($this->key .
'shadow-image');
if (empty($shadow)) {
$shadow = $params->get($this->key . 'shadow');
if ($shadow == -1) {
$shadow = null;
} else {
$shadow = self::getAssetsUri() . '/shadow/' .
basename($shadow);
}
}
if (!$shadow) {
return '';
}
$slider->addLess(self::getAssetsPath() .
'/style.n2less', array(
"sliderid" => $slider->elementId
));
$displayAttributes = $this->getDisplayAttributes($params,
$this->key);
$slider->features->addInitCallback("new
_N2.SmartSliderWidget(this, 'shadow',
'.nextend-shadow');");
$slider->sliderType->addJSDependency('SmartSliderWidget');
$sizeAttributes = array();
FastImageSize::initAttributes(ResourceTranslator::urlToResource($shadow),
$sizeAttributes);
return Html::tag('div',
Html::mergeAttributes($displayAttributes, array(
'class' => "nextend-shadow n2-ow-all"
)), Html::image(ResourceTranslator::toUrl($shadow),
'Shadow', $sizeAttributes +
Html::addExcludeLazyLoadAttributes(array(
'style' => 'display: block;
width:100%;max-width:none;',
'class' => 'nextend-shadow-image',
'loading' => 'lazy'
))));
}
}PK;e�[�l�~~Widget/SliderWidget.phpnu�[���<?php
namespace Nextend\SmartSlider3\Widget;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Slider\Slider;
class SliderWidget {
/** @var AbstractWidgetFrontend[] */
private $enabledWidgets = array();
public $widgets = array();
public $left = array();
public $right = array();
/**
* @var WidgetPlacementSimple[]
*/
private $placements = array();
/**
* @var WidgetPlacementAdvanced
*/
private $placementAdvanced;
public $slider;
/**
* @param $slider Slider
*/
public function __construct($slider) {
$this->slider = $slider;
$params = $slider->params;
$this->placements['above'] = new
WidgetPlacementSimple('above');
$this->placements['below'] = new
WidgetPlacementSimple('below');
$this->placements['left'] = new
WidgetPlacementSimple('left');
$this->placements['right'] = new
WidgetPlacementSimple('right');
$this->placements['absolute-left'] = new
WidgetPlacementSimple('absolute-left');
$this->placements['absolute-right'] = new
WidgetPlacementSimple('absolute-right');
$this->placements['absolute-left-top'] = new
WidgetPlacementSimple('absolute-left-top');
$this->placements['absolute-center-top'] = new
WidgetPlacementSimple('absolute-center-top');
$this->placements['absolute-right-top'] = new
WidgetPlacementSimple('absolute-right-top');
$this->placements['absolute-left-center'] = new
WidgetPlacementSimple('absolute-left-center');
$this->placements['absolute-right-center'] = new
WidgetPlacementSimple('absolute-right-center');
$this->placements['absolute-left-bottom'] = new
WidgetPlacementSimple('absolute-left-bottom');
$this->placements['absolute-center-bottom'] = new
WidgetPlacementSimple('absolute-center-bottom');
$this->placements['absolute-right-bottom'] = new
WidgetPlacementSimple('absolute-right-bottom');
$this->placementAdvanced = new
WidgetPlacementAdvanced('advanced');
$widgetGroups = WidgetGroupFactory::getGroups();
foreach ($widgetGroups as $groupName => $group) {
$isEnabled = false;
if ($params->has('widget-' . $group->getName()
. '-enabled')) {
$isEnabled = $params->get('widget-' .
$group->getName() . '-enabled', 0);
} else {
$oldValue = $params->get('widget' .
$groupName);
if ($oldValue != 'disabled' && $oldValue
!= '') {
$isEnabled = true;
}
}
if ($isEnabled) {
$widget =
$group->getWidget($params->get('widget' . $groupName));
if ($widget) {
$this->enabledWidgets[$groupName] =
$widget->createFrontend($this, $params);
}
}
}
}
public function addToSimplePlacement($renderCallback, $placement,
$stack, $offset = 0) {
$this->placements[$placement]->add($renderCallback, $stack,
$offset);
}
public function addToAdvancedPlacement($renderCallback,
$horizontalSide, $horizontalPosition, $horizontalUnit, $verticalSide,
$verticalPosition, $verticalUnit) {
$this->placementAdvanced->add($renderCallback,
$horizontalSide, $horizontalPosition, $horizontalUnit, $verticalSide,
$verticalPosition, $verticalUnit);
}
public function wrapSlider($innerHTML) {
$insideAbsoluteHTML = '';
$insideAbsolutes = array(
'absolute-left-top',
'absolute-center-top',
'absolute-right-top',
'absolute-left-center',
'absolute-right-center',
'absolute-left-bottom',
'absolute-center-bottom',
'absolute-right-bottom'
);
foreach ($insideAbsolutes as $insideAbsolute) {
if (!$this->placements[$insideAbsolute]->empty()) {
$insideAbsoluteHTML .=
$this->placements[$insideAbsolute]->render();
}
}
if (!$this->placementAdvanced->empty()) {
$insideAbsoluteHTML .=
$this->placementAdvanced->render();
}
if (!empty($insideAbsoluteHTML)) {
$innerHTML = Html::tag('div', array(
'class' =>
'n2-ss-slider-wrapper-inside'
), $innerHTML . $insideAbsoluteHTML);
}
$leftHTML = '';
if (!$this->placements['left']->empty()) {
$leftHTML =
$this->placements['left']->render();
}
if (!$this->placements['absolute-left']->empty()) {
$leftHTML .=
$this->placements['absolute-left']->render();
}
$rightHTML = '';
if (!$this->placements['right']->empty()) {
$rightHTML =
$this->placements['right']->render();
}
if (!$this->placements['absolute-right']->empty())
{
$rightHTML .=
$this->placements['absolute-right']->render();
}
if (!empty($leftHTML) || !empty($rightHTML)) {
$innerHTML = Html::tag('div', array(
'class' =>
'n2-ss-slider-controls-side'
), $leftHTML . $innerHTML . $rightHTML);
}
$templateRows = array();
if (!$this->placements['above']->empty()) {
$innerHTML =
$this->placements['above']->render() . $innerHTML;
$templateRows[] = 'auto';
}
$templateRows[] = '1fr';
if (!$this->placements['below']->empty()) {
$innerHTML .=
$this->placements['below']->render();
$templateRows[] = 'auto';
}
if (count($templateRows) > 1) {
/**
* Full page responsive type need this grid to properly render
*/
$innerHTML = Html::tag('div', array(
'class' =>
'n2-ss-slider-wrapper-outside',
'style' => 'grid-template-rows:' .
implode(' ', $templateRows)
), $innerHTML);
}
return $innerHTML;
}
}PK;e�[�l;SB'B')Widget/Thumbnail/Basic/ThumbnailBasic.phpnu�[���<?php
namespace Nextend\SmartSlider3\Widget\Thumbnail\Basic;
use Nextend\Framework\Form\Element\Font;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Style;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Element\Text\FieldImage;
use Nextend\Framework\Form\Element\Text\Number;
use Nextend\Framework\Form\Fieldset\FieldsetRow;
use Nextend\SmartSlider3\Form\Element\Group\WidgetPosition;
use Nextend\SmartSlider3\Widget\AbstractWidget;
class ThumbnailBasic extends AbstractWidget {
protected $key = 'widget-thumbnail-';
protected $defaults = array(
'widget-thumbnail-position-mode' =>
'simple',
'widget-thumbnail-position-area' => 12,
'widget-thumbnail-action' =>
'click',
'widget-thumbnail-style-bar' =>
'{"data":[{"backgroundcolor":"242424ff","padding":"3|*|3|*|3|*|3|*|px","boxshadow":"0|*|0|*|0|*|0|*|000000ff","border":"0|*|solid|*|000000ff","borderradius":"0","extra":""}]}',
'widget-thumbnail-style-slides' =>
'{"data":[{"backgroundcolor":"00000000","padding":"0|*|0|*|0|*|0|*|px","boxshadow":"0|*|0|*|0|*|0|*|000000ff","border":"0|*|solid|*|ffffff00","borderradius":"0","opacity":"40","extra":"margin:
3px;\ntransition: all
0.4s;"},{"border":"0|*|solid|*|ffffffcc","opacity":"100","extra":""}]}',
'widget-thumbnail-arrow' => 1,
'widget-thumbnail-arrow-image' => '',
'widget-thumbnail-arrow-width' => 26,
'widget-thumbnail-arrow-offset' => 0,
'widget-thumbnail-arrow-prev-alt' => 'previous
arrow',
'widget-thumbnail-arrow-next-alt' => 'next
arrow',
'widget-thumbnail-title-style' =>
'{"data":[{"backgroundcolor":"000000ab","padding":"3|*|10|*|3|*|10|*|px","boxshadow":"0|*|0|*|0|*|0|*|000000ff","border":"0|*|solid|*|000000ff","borderradius":"0","extra":"bottom:
0;\nleft: 0;"}]}',
'widget-thumbnail-title' => 0,
'widget-thumbnail-title-font' =>
'{"data":[{"color":"ffffffff","size":"12||px","tshadow":"0|*|0|*|0|*|000000ab","afont":"Montserrat","lineheight":"1.2","bold":0,"italic":0,"underline":0,"align":"left"},{"color":"fc2828ff","afont":"Raleway,Arial","size":"25||px"},{}]}',
'widget-thumbnail-description' => 0,
'widget-thumbnail-description-font' =>
'{"data":[{"color":"ffffffff","size":"12||px","tshadow":"0|*|0|*|0|*|000000ab","afont":"Montserrat","lineheight":"1.3","bold":0,"italic":0,"underline":0,"align":"left"},{"color":"fc2828ff","afont":"Raleway,Arial","size":"25||px"},{}]}',
'widget-thumbnail-caption-placement' =>
'overlay',
'widget-thumbnail-caption-size' => 100,
'widget-thumbnail-group' => 1,
'widget-thumbnail-orientation' =>
'auto',
'widget-thumbnail-size' =>
'100%',
'widget-thumbnail-show-image' => 1,
'widget-thumbnail-width' => 100,
'widget-thumbnail-height' => 60,
'widget-thumbnail-align-content' =>
'start'
);
public function renderFields($container) {
$row1 = new FieldsetRow($container,
'widget-thumbnail-default-row-1');
new WidgetPosition($row1, 'widget-thumbnail-position',
n2_('Position'));
new Select($row1, 'widget-thumbnail-action',
n2_('Action'), '', array(
'options' => array(
'click' => n2_('Click'),
'mouseenter' => n2_('Hover')
)
));
new Select($row1, 'widget-thumbnail-align-content',
n2_('Align thumbnails'), '', array(
'options' => array(
'start' => n2_('Start'),
'center' => n2_('Center'),
'end' => n2_('End'),
'space-between' => n2_('Space
between'),
'space-around' => n2_('Space
around')
)
));
new Style($row1, 'widget-thumbnail-style-bar',
n2_('Bar'), '', array(
'mode' => 'simple',
'style2' =>
'sliderwidget-thumbnail-style-slides',
'preview' =>
'SmartSliderAdminWidgetThumbnailBasic'
));
new Style($row1, 'widget-thumbnail-style-slides',
n2_('Thumbnail'), '', array(
'mode' => 'dot',
'style2' =>
'sliderwidget-thumbnail-style-bar',
'preview' =>
'SmartSliderAdminWidgetThumbnailBasic'
));
$rowCaption = new FieldsetRow($container,
'widget-thumbnail-default-row-caption');
new Style($rowCaption, 'widget-thumbnail-title-style',
n2_('Caption'), '', array(
'mode' => 'simple',
'post' => 'break',
'font' =>
'sliderwidget-thumbnail-title-font',
'preview' =>
'SmartSliderAdminWidgetThumbnailBasic'
));
new OnOff($rowCaption, 'widget-thumbnail-title',
n2_('Title'), '', array(
'relatedFieldsOn' => array(
'sliderwidget-thumbnail-title-font'
)
));
new Font($rowCaption, 'widget-thumbnail-title-font',
'', '', array(
'mode' => 'simple',
'style' =>
'sliderwidget-thumbnail-title-style',
'preview' =>
'SmartSliderAdminWidgetThumbnailBasic'
));
new OnOff($rowCaption, 'widget-thumbnail-description',
n2_('Description'), '', array(
'relatedFieldsOn' => array(
'sliderwidget-thumbnail-description-font'
)
));
new Font($rowCaption,
'widget-thumbnail-description-font', '', '',
array(
'mode' => 'simple',
'style' =>
'sliderwidget-thumbnail-title-style',
'preview' =>
'SmartSliderAdminWidgetThumbnailBasic'
));
new Select($rowCaption,
'widget-thumbnail-caption-placement', n2_('Placement'),
'', array(
'options' => array(
'before' => n2_('Before'),
'overlay' => n2_('Overlay'),
'after' => n2_('After')
)
));
new Number($rowCaption, 'widget-thumbnail-caption-size',
n2_('Size'), '', array(
'wide' => 5,
'unit' => 'px',
'tipLabel' => n2_('Size'),
'tipDescription' => n2_('The height
(horizontal orientation) or width (vertical orientation) of the caption
container.')
));
$rowArrow = new FieldsetRow($container,
'widget-thumbnail-default-row-arrow');
new OnOff($rowArrow, 'widget-thumbnail-arrow',
n2_('Arrow'), 1, array(
'relatedFieldsOn' => array(
'sliderwidget-thumbnail-arrow-image',
'sliderwidget-thumbnail-arrow-width',
'sliderwidget-thumbnail-arrow-offset',
'sliderwidget-thumbnail-arrow-prev-alt',
'sliderwidget-thumbnail-arrow-next-alt'
)
));
new Number($rowArrow, 'widget-thumbnail-arrow-width',
n2_('Size'), 26, array(
'wide' => 4,
'unit' => 'px'
));
new Number($rowArrow, 'widget-thumbnail-arrow-offset',
n2_('Offset'), 0, array(
'wide' => 4,
'unit' => 'px'
));
new Text($rowArrow, 'widget-thumbnail-arrow-prev-alt',
n2_('Previous alt tag'), 'previous arrow', array(
'style' => 'width:100px;'
));
new Text($rowArrow, 'widget-thumbnail-arrow-next-alt',
n2_('Next alt tag'), 'next arrow', array(
'style' => 'width:100px;'
));
new FieldImage($rowArrow, 'widget-thumbnail-arrow-image',
n2_('Next arrow image'), '', array(
'tipLabel' => n2_('Next arrow
image'),
'tipDescription' => n2_('The previous arrow
image will be mirrored.'),
'tipLink' =>
'https://smartslider.helpscoutdocs.com/article/1857-thumbnails#arrow'
));
$row4 = new FieldsetRow($container,
'widget-thumbnail-default-row-4');
new Number($row4, 'widget-thumbnail-group',
n2_('Group by'), '', array(
'unit' => n2_x('thumbnails',
'Unit'),
'wide' => 3,
'tipLabel' => n2_('Group by'),
'tipDescription' => n2_('You can break your
thumbnails into rows or columns.')
));
new Select($row4, 'widget-thumbnail-orientation',
n2_('Orientation'), '', array(
'options' => array(
'auto' => n2_('Auto'),
'horizontal' => n2_('Horizontal'),
'vertical' => n2_('Vertical')
)
));
new Text($row4, 'widget-thumbnail-size',
n2_('Size'), '', array(
'style' => 'width:150px;',
'tipLabel' => n2_('Size'),
'tipDescription' => n2_('The height
(horizontal orientation) or width (vertical orientation) of the thumbnail
container in px or %.')
));
}
public function prepareExport($export, $params) {
$export->addVisual($params->get($this->key .
'style-bar'));
$export->addVisual($params->get($this->key .
'style-slides'));
$export->addVisual($params->get($this->key .
'title-style'));
$export->addVisual($params->get($this->key .
'title-font'));
$export->addVisual($params->get($this->key .
'description-font'));
}
public function prepareImport($import, $params) {
$params->set($this->key . 'style-bar',
$import->fixSection($params->get($this->key .
'style-bar', '')));
$params->set($this->key . 'style-slides',
$import->fixSection($params->get($this->key .
'style-slides', '')));
$params->set($this->key . 'title-style',
$import->fixSection($params->get($this->key .
'title-style', '')));
$params->set($this->key . 'title-font',
$import->fixSection($params->get($this->key .
'title-font', '')));
$params->set($this->key . 'description-font',
$import->fixSection($params->get($this->key .
'description-font', '')));
}
}PK;e�[Y��551Widget/Thumbnail/Basic/ThumbnailBasicFrontend.phpnu�[���<?php
namespace Nextend\SmartSlider3\Widget\Thumbnail\Basic;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\FastImageSize\FastImageSize;
use Nextend\Framework\Filesystem\Filesystem;
use Nextend\Framework\Misc\Base64;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Widget\AbstractWidgetFrontend;
class ThumbnailBasicFrontend extends AbstractWidgetFrontend {
private static $thumbnailTypes = array(
'videoDark' => '<svg
class="n2-thumbnail-dot-type"
xmlns="http://www.w3.org/2000/svg" width="48"
height="48" viewBox="0 0 48 48"><circle
cx="24" cy="24" r="24" fill="#000"
opacity=".6"/><path fill="#FFF" d="M19.8
32c-.124
0-.247-.028-.36-.08-.264-.116-.436-.375-.44-.664V16.744c.005-.29.176-.55.44-.666.273-.126.592-.1.84.07l10.4
7.257c.2.132.32.355.32.595s-.12.463-.32.595l-10.4
7.256c-.14.1-.31.15-.48.15z"/></svg>'
);
public function __construct($sliderWidget, $widget, $params) {
parent::__construct($sliderWidget, $widget, $params);
$this->addToPlacement($this->key . 'position-',
array(
$this,
'render'
));
}
public function render($attributes = array()) {
$slider = $this->slider;
$id = $this->slider->elementId;
$params = $this->params;
$showThumbnail = intval($params->get($this->key .
'show-image'));
$showTitle = intval($params->get($this->key .
'title'));
$showDescription = intval($params->get($this->key .
'description'));
if (!$showThumbnail && !$showTitle &&
!$showDescription) {
// Nothing to show
return '';
}
$parameters = array(
'action' =>
$params->get($this->key . 'action'),
'minimumThumbnailCount' => max(1,
intval($params->get($this->key .
'minimum-thumbnail-count')))
);
$displayAttributes = $this->getDisplayAttributes($params,
$this->key);
$barStyle = $slider->addStyle($params->get($this->key .
'style-bar'), 'simple');
$slideStyle = $slider->addStyle($params->get($this->key .
'style-slides'), 'dot');
$width = intval($slider->params->get($this->key .
'width', 100));
$height = intval($slider->params->get($this->key .
'height', 60));
$css = '';
if ($showThumbnail) {
$css .= 'div#' . $this->slider->elementId .
' .n2-thumbnail-dot img{width:' . $width . 'px;height:'
. $height . 'px}';
} else {
$css .= 'div#' . $this->slider->elementId .
' .n2-thumbnail-dot{min-width:' . $width .
'px;min-height:' . $height . 'px}';
}
if (!empty($css)) {
$this->slider->addDeviceCSS('all', $css);
}
$tabletWidth = intval($slider->params->get($this->key .
'tablet-width', $width));
$tabletHeight = intval($slider->params->get($this->key .
'tablet-height', $height));
if ($tabletWidth !== $width || $tabletHeight !== $height) {
$css = '';
if ($showThumbnail) {
$css .= 'div#' . $this->slider->elementId .
' .n2-thumbnail-dot img{width:' . $tabletWidth .
'px;height:' . $tabletHeight . 'px}';
} else {
$css .= 'div#' . $this->slider->elementId .
' .n2-thumbnail-dot{min-width:' . $tabletWidth .
'px;min-height:' . $tabletHeight . 'px}';
}
if (!empty($css)) {
$this->slider->addDeviceCSS('tabletportrait', $css);
$this->slider->addDeviceCSS('tabletlandscape', $css);
}
}
$mobileWidth = intval($slider->params->get($this->key .
'mobile-width', $width));
$mobileHeight = intval($slider->params->get($this->key .
'mobile-height', $height));
if ($mobileWidth !== $width || $mobileHeight !== $height) {
$css = '';
if ($showThumbnail) {
$css .= 'div#' . $this->slider->elementId .
' .n2-thumbnail-dot img{width:' . $mobileWidth .
'px;height:' . $mobileHeight . 'px}';
} else {
$css .= 'div#' . $this->slider->elementId .
' .n2-thumbnail-dot{min-width:' . $mobileWidth .
'px;min-height:' . $mobileHeight . 'px}';
}
if (!empty($css)) {
$this->slider->addDeviceCSS('mobileportrait', $css);
$this->slider->addDeviceCSS('mobilelandscape', $css);
}
}
$captionPlacement = $slider->params->get($this->key .
'caption-placement', 'overlay');
if (!$showThumbnail) {
$captionPlacement = 'before';
}
if (!$showTitle && !$showDescription) {
$captionPlacement = 'overlay';
}
$captionSize = intval($slider->params->get($this->key .
'caption-size', 100));
$orientation = $params->get($this->key .
'orientation');
$orientation =
$this->getOrientationByPosition($params->get($this->key .
'position-mode'), $params->get($this->key .
'position-area'), $orientation, 'vertical');
$captionExtraStyle = '';
switch ($captionPlacement) {
case 'before':
case 'after':
switch ($orientation) {
case 'vertical':
$captionExtraStyle .= "width: " .
$captionSize . "px";
break;
default:
$captionExtraStyle .= "height: " .
$captionSize . "px";
}
break;
}
if ($orientation == 'vertical') {
Js::addStaticGroup(self::getAssetsPath() .
'/dist/w-thumbnail-vertical.min.js',
'w-thumbnail-vertical');
$slider->features->addInitCallback('new
_N2.SmartSliderWidgetThumbnailDefaultVertical(this, ' .
json_encode($parameters) . ');');
$slider->sliderType->addJSDependency('SmartSliderWidgetThumbnailDefaultVertical');
} else {
Js::addStaticGroup(self::getAssetsPath() .
'/dist/w-thumbnail-horizontal.min.js',
'w-thumbnail-horizontal');
$slider->features->addInitCallback('new
_N2.SmartSliderWidgetThumbnailDefaultHorizontal(this, ' .
json_encode($parameters) . ');');
$slider->sliderType->addJSDependency('SmartSliderWidgetThumbnailDefaultHorizontal');
}
$group = max(1, intval($params->get($this->key .
'group')));
$style = '';
$size = $params->get($this->key . 'size');
if (is_numeric($size)) {
$size .= '%';
}
if ($orientation == 'horizontal') {
if (substr($size, -1) == '%' || substr($size, -2) ==
'px') {
$style .= 'width:' . $size . ';';
if (substr($size, -1) == '%') {
$attributes['data-width-percent'] =
substr($size, 0, -1);
}
}
$scrollerStyle = 'grid-template-rows:repeat(' .
$group . ', 1fr)';
} else {
if (substr($size, -1) == '%' || substr($size, -2) ==
'px') {
$style .= 'height:' . $size . ';';
}
$scrollerStyle = 'grid-template-columns:repeat(' .
$group . ', 1fr)';
}
$previous = $next = '';
$nextSizeAttributes = array();
$previousSizeAttributes = array();
$showArrow = intval($slider->params->get($this->key .
'arrow', 1));
if ($showArrow) {
$arrowImagePrevious = $arrowImageNext =
ResourceTranslator::toUrl($slider->params->get($this->key .
'arrow-image', ''));
$arrowWidth =
intval($slider->params->get($this->key . 'arrow-width',
26));
$commonStyle = '';
if (!empty($arrowWidth)) {
$commonStyle = 'width:' . $arrowWidth .
'px;';
}
$previousStyle = $nextStyle = $commonStyle;
if (empty($arrowImagePrevious)) {
$image = self::getAssetsPath() .
'/thumbnail-up-arrow.svg';
FastImageSize::initAttributes($image,
$previousSizeAttributes);
$arrowImagePrevious =
'data:image/svg+xml;base64,' .
Base64::encode(Filesystem::readFile($image));
} else {
FastImageSize::initAttributes(ResourceTranslator::urlToResource($arrowImagePrevious),
$previousSizeAttributes);
switch ($orientation) {
case 'vertical':
$previousStyle .= 'transform:rotateY(180deg)
rotateX(180deg);';
break;
default:
$previousStyle .= 'transform:rotateZ(180deg)
rotateX(180deg);';
}
}
if (empty($arrowImageNext)) {
$image = self::getAssetsPath() .
'/thumbnail-down-arrow.svg';
FastImageSize::initAttributes($image, $nextSizeAttributes);
$arrowImageNext = 'data:image/svg+xml;base64,' .
Base64::encode(Filesystem::readFile($image));
} else {
$nextStyle .= 'transform:none;';
FastImageSize::initAttributes(ResourceTranslator::urlToResource($arrowImageNext),
$nextSizeAttributes);
}
$previous = Html::tag('div', array(
'class' => 'nextend-thumbnail-button
nextend-thumbnail-previous'
), Html::image($arrowImagePrevious,
$slider->params->get($this->key . 'arrow-prev-alt',
'previous arrow'), $previousSizeAttributes +
Html::addExcludeLazyLoadAttributes(array(
'style' => $previousStyle,
'loading' => 'lazy'
))));
$next = Html::tag('div', array(
'class' => 'nextend-thumbnail-button
nextend-thumbnail-next'
), Html::image($arrowImageNext,
$slider->params->get($this->key . 'arrow-next-alt',
'next arrow'), $nextSizeAttributes +
Html::addExcludeLazyLoadAttributes(array(
'style' => $nextStyle,
'loading' => 'lazy'
))));
}
$captionStyle = '';
if ($showTitle || $showDescription) {
$captionStyle =
$slider->addStyle($params->get($this->key .
'title-style'), 'simple');
}
$titleFont = '';
if ($showTitle) {
$titleFont = $slider->addFont($params->get($this->key
. 'title-font'), 'simple');
}
$descriptionFont = '';
if ($showDescription) {
$descriptionFont =
$slider->addFont($params->get($this->key .
'description-font'), 'simple');
}
$dots = array();
$slides = $slider->getSlides();
foreach ($slides as $slide) {
$dotHTML = array();
if ($showThumbnail) {
$dotHTML[] = $slide->renderThumbnailImage($width,
$height, array(
'alt' => $slide->getTitle()
));
$thumbnailType = $slide->getThumbnailType();
if (isset(self::$thumbnailTypes[$thumbnailType])) {
$dotHTML[] = self::$thumbnailTypes[$thumbnailType];
}
}
if ($showTitle || $showDescription) {
$captionHTML = '';
if ($showTitle) {
$title = $slide->getTitle();
if (!empty($title)) {
$captionHTML .= '<div class="' .
$titleFont . '">' . $title . '</div>';
}
}
if ($showDescription) {
$description = $slide->getDescription();
if (!empty($description)) {
$captionHTML .= '<div class="' .
$descriptionFont . '">' . $description .
'</div>';
}
}
if (!empty($captionHTML)) {
$dotHTML[] = Html::tag('div', array(
'class' => $captionStyle . '
n2-ss-caption n2-ow n2-caption-' . $captionPlacement,
'style' => $captionExtraStyle
), $captionHTML);
}
}
$dots[] = Html::tag('div',
$slide->showOnAttributes + array(
'class' =>
'n2-thumbnail-dot ' . $slideStyle,
'data-slide-public-id' =>
$slide->getPublicID(),
'role' =>
'button',
'aria-label' =>
$slide->getTitle(),
'tabindex' => '0'
), implode('', $dotHTML));
}
$slider->addLess(self::getAssetsPath() .
'/style.n2less', array(
"sliderid" => $slider->elementId
));
return Html::tag('div',
Html::mergeAttributes($attributes, $displayAttributes, array(
'class' => 'nextend-thumbnail
nextend-thumbnail-default nextend-thumbnail-' . $orientation . '
n2-ow-all',
'data-has-next' => 0,
'data-has-previous' => 0,
'style' => $style
)), Html::tag('div', array(
'class' => 'nextend-thumbnail-inner
' . $barStyle
), Html::tag('div', array(
'class' => 'nextend-thumbnail-scroller
n2-align-content-' .
$params->get('widget-thumbnail-align-content'),
'style' => $scrollerStyle
), implode('', $dots))) . $previous . $next);
}
protected function translateArea($area) {
if ($area == 5) {
return 'left';
} else if ($area == 8) {
return 'right';
}
return parent::translateArea($area);
}
}PK;e�[�8�O??Widget/WidgetGroupFactory.phpnu�[���<?php
namespace Nextend\SmartSlider3\Widget;
use Nextend\Framework\Pattern\PluggableTrait;
use Nextend\Framework\Pattern\SingletonTrait;
use Nextend\SmartSlider3\Widget\Group\AbstractWidgetGroup;
use Nextend\SmartSlider3\Widget\Group\Arrow;
use Nextend\SmartSlider3\Widget\Group\Autoplay;
use Nextend\SmartSlider3\Widget\Group\Bar;
use Nextend\SmartSlider3\Widget\Group\Bullet;
use Nextend\SmartSlider3\Widget\Group\Shadow;
use Nextend\SmartSlider3\Widget\Group\Thumbnail;
class WidgetGroupFactory {
use SingletonTrait, PluggableTrait;
/** @var AbstractWidgetGroup[] */
private static $groups = array();
protected function init() {
new Arrow();
new Autoplay();
new Bar();
new Bullet();
new Shadow();
new Thumbnail();
$this->makePluggable('SliderWidgetGroup');
}
/**
* @param AbstractWidgetGroup $group
*/
public static function addGroup($group) {
self::$groups[$group->getName()] = $group;
}
/**
* @return AbstractWidgetGroup[]
*/
public static function getGroups() {
return self::$groups;
}
/**
* @param $name
*
* @return AbstractWidgetGroup
*/
public static function getGroup($name) {
return self::$groups[$name];
}
}
WidgetGroupFactory::getInstance();PK;e�[W��Widget/WidgetPlacement.phpnu�[���<?php
namespace Nextend\SmartSlider3\Widget;
class WidgetPlacement {
protected $name;
protected $items = array();
public function __construct($name) {
$this->name = $name;
}
public function empty() {
return empty($this->items);
}
}PK;e�[R)e�
�
"Widget/WidgetPlacementAdvanced.phpnu�[���<?php
namespace Nextend\SmartSlider3\Widget;
use Nextend\Framework\View\Html;
class WidgetPlacementAdvanced extends WidgetPlacement {
protected $items = array();
protected $variables = array();
public function add($renderCallback, $horizontalSide,
$horizontalPosition, $horizontalUnit, $verticalSide, $verticalPosition,
$verticalUnit) {
$attributes = array(
'style' => ''
);
$transforms = array();
if (is_numeric($horizontalPosition)) {
$attributes['style'] .= $horizontalSide .
':' . $horizontalPosition . $horizontalUnit . ';';
} else {
$attributes['style'] .= $horizontalSide .
':0;';
$transforms[] = 'translateX(' .
$this->toCSSCalc($horizontalSide == 'left' ? 1 : -1,
$horizontalPosition) . ')';
}
if (is_numeric($verticalPosition)) {
$attributes['style'] .= $verticalSide . ':'
. $verticalPosition . $verticalUnit . ';';
} else {
$attributes['style'] .= $verticalSide .
':0;';
$transforms[] = 'translateY(' .
$this->toCSSCalc($verticalSide == 'top' ? 1 : -1,
$verticalPosition) . ')';
}
if (!empty($transforms)) {
$attributes['style'] .= 'transform:' .
implode(' ', $transforms) . ';';
}
$this->items[] = array(
'renderCallback' => $renderCallback,
'attributes' => $attributes
);
}
public function render() {
$out = '';
foreach ($this->items as $item) {
$out .= call_user_func($item['renderCallback'],
$item['attributes']);
}
if (!empty($out)) {
return Html::tag('div', array(
'class' =>
'n2-ss-slider-controls n2-ss-slider-controls-' . $this->name,
'data-variables' => implode(',',
array_unique($this->variables))
), $out);
}
return '';
}
private function toCSSCalc($modifier, $expression) {
// Remove whitespaces
$expression = preg_replace('/\s+/', '',
$expression);
// take care of minus symbol on single number
$expression = preg_replace('/([+\-*\/])[\-]/',
'$1[minus]', $expression);
$expression = preg_replace('/[+\-*\/]/', ' $0
', $expression);
$expression = str_replace('[minus]', '-1 * ',
$expression);
preg_match_all('/[a-zA-Z][a-zA-Z0-9]*/', $expression,
$matches);
foreach ($matches as $match) {
if (!empty($match)) {
$this->variables = array_merge($this->variables,
$match);
}
}
$expression = preg_replace('/[a-zA-Z][a-zA-Z0-9]*/',
'var(--$0, 0)', $expression);
return 'calc(' . $modifier . 'px * (' .
$expression . '))';
}
}PK;e�[������
Widget/WidgetPlacementSimple.phpnu�[���<?php
namespace Nextend\SmartSlider3\Widget;
use Nextend\Framework\View\Html;
class WidgetPlacementSimple extends WidgetPlacement {
public function add($renderCallback, $stack, $offset = 0) {
$this->items[] = array(
'stack' => $stack,
'renderCallback' => $renderCallback,
'offset' => $offset
);
}
public function render() {
usort($this->items, function ($a, $b) {
if ($a['stack'] == $b['stack']) {
return 0;
}
return ($a['stack'] < $b['stack']) ? -1
: 1;
});
$out = '';
foreach ($this->items as $item) {
$attributes = array();
if ($item['offset'] != 0) {
$attributes['style'] =
'--widget-offset:' . $item['offset'] . 'px;';
}
$out .= call_user_func($item['renderCallback'],
$attributes);
}
if (!empty($out)) {
return Html::tag('div', array(
'class' => 'n2-ss-slider-controls
n2-ss-slider-controls-' . $this->name
), $out);
}
return '';
}
}PK9e�[
�d��-Application/Admin/AbstractControllerAdmin.phpnu�[���PK9e�[}T���*C Application/Admin/ApplicationTypeAdmin.phpnu�[���PK9e�[�ҽII2!!Application/Admin/FormManager/FormManagerSlide.phpnu�[���PK9e�[��p\TT3�(Application/Admin/FormManager/FormManagerSlider.phpnu�[���PK9e�[��N��:�=Application/Admin/FormManager/Slider/AbstractSliderTab.phpnu�[���PK9e�[k�
��9�@Application/Admin/FormManager/Slider/SliderAnimations.phpnu�[���PK9e�[x���
�
72TApplication/Admin/FormManager/Slider/SliderAutoplay.phpnu�[���PK9e�[,�c�:
:
7wbApplication/Admin/FormManager/Slider/SliderControls.phpnu�[���PK9e�[8֨�8mApplication/Admin/FormManager/Slider/SliderDeveloper.phpnu�[���PK9e�[S��
6(�Application/Admin/FormManager/Slider/SliderGeneral.phpnu�[���PK9e�[:;���0�07��Application/Admin/FormManager/Slider/SliderOptimize.phpnu�[���PK9e�[d���9S9S3��Application/Admin/FormManager/Slider/SliderSize.phpnu�[���PK9e�[2����5T(Application/Admin/FormManager/Slider/SliderSlides.phpnu�[���PK9e�[;��Kww7>=Application/Admin/Generator/ControllerAjaxGenerator.phpnu�[���PK9e�[�[c$|!|!3YApplication/Admin/Generator/ControllerGenerator.phpnu�[���PK9e�[�8Wpp:�zApplication/Admin/Generator/Template/CreateStep1Groups.phpnu�[���PK9e�[S
JvJJ=ՆApplication/Admin/Generator/Template/CreateStep2Configure.phpnu�[���PK9e�[z�����;��Application/Admin/Generator/Template/CreateStep3Sources.phpnu�[���PK9e�[����LL<��Application/Admin/Generator/Template/CreateStep4Settings.phpnu�[���PK9e�[�jHE
-O�Application/Admin/Generator/Template/Edit.phpnu�[���PK9e�[�q
���=��Application/Admin/Generator/ViewAjaxGeneratorRecordsTable.phpnu�[���PK9e�[x'5f��>��Application/Admin/Generator/ViewGeneratorCreateStep1Groups.phpnu�[���PK9e�[(0W���A��Application/Admin/Generator/ViewGeneratorCreateStep2Configure.phpnu�[���PK9e�[�Ԍh� � ?��Application/Admin/Generator/ViewGeneratorCreateStep3Sources.phpnu�[���PK9e�[5w@�Application/Admin/Generator/ViewGeneratorCreateStep4Settings.phpnu�[���PK9e�[�K1��Application/Admin/Generator/ViewGeneratorEdit.phpnu�[���PK9e�[���XX)�Application/Admin/Help/ControllerHelp.phpnu�[���PK9e�[o��+$+$)��Application/Admin/Help/Template/Index.phpnu�[���PK9e�[$=e���6LApplication/Admin/Help/ViewHelpBrowserIncompatible.phpnu�[���PK9e�[BZ;��(tApplication/Admin/Help/ViewHelpIndex.phpnu�[���PK9e�[��H�55+�+Application/Admin/JavaScriptTranslation.phpnu�[���PK9e�[��"\/9CApplication/Admin/Layout/AbstractLayoutMenu.phpnu�[���PK9e�[��<��3�JApplication/Admin/Layout/Block/Core/Admin/Admin.phpnu�[���PK9e�[����t t 8�NApplication/Admin/Layout/Block/Core/Admin/BlockAdmin.phpnu�[���PK9e�[-�Qű�?�XApplication/Admin/Layout/Block/Core/AdminEditor/AdminEditor.phpnu�[���PK9e�[�r4�bbD�\Application/Admin/Layout/Block/Core/AdminEditor/BlockAdminEditor.phpnu�[���PK9e�[?6����=�cApplication/Admin/Layout/Block/Core/AdminEmpty/AdminEmpty.phpnu�[���PK9e�[��We11B�eApplication/Admin/Layout/Block/Core/AdminEmpty/BlockAdminEmpty.phpnu�[���PK9e�[>�8�jj=�jApplication/Admin/Layout/Block/Core/AdminError/AdminError.phpnu�[���PK9e�[�1"��BZnApplication/Admin/Layout/Block/Core/AdminError/BlockAdminError.phpnu�[���PK9e�[�����?�sApplication/Admin/Layout/Block/Core/AdminIframe/AdminIframe.phpnu�[���PK9e�[(��))D�wApplication/Admin/Layout/Block/Core/AdminIframe/BlockAdminIframe.phpnu�[���PK9e�[�_$���5B�Application/Admin/Layout/Block/Core/Banner/Banner.phpnu�[���PK9e�[1QA A :i�Application/Admin/Layout/Block/Core/Banner/BlockBanner.phpnu�[���PK9e�[�E�$$B�Application/Admin/Layout/Block/Core/Banner/BlockBannerActivate.phpnu�[���PK9e�[|�s__G��Application/Admin/Layout/Block/Core/BlockBreadCrumb/BlockBreadCrumb.phpnu�[���PK9e�[I����B��Application/Admin/Layout/Block/Core/BlockBreadCrumb/BreadCrumb.phpnu�[���PK9e�[H��B::JĜApplication/Admin/Layout/Block/Core/ContentSidebar/BlockContentSidebar.phpnu�[���PK9e�[�����Ex�Application/Admin/Layout/Block/Core/ContentSidebar/ContentSidebar.phpnu�[���PK9e�[�Tgb��:��Application/Admin/Layout/Block/Core/Header/BlockHeader.phpnu�[���PK9e�[�#ꖿ�5��Application/Admin/Layout/Block/Core/Header/Header.phpnu�[���PK9e�[��2n��7�Application/Admin/Layout/Block/Core/Header/MenuItem.phpnu�[���PK9e�[/����:�Application/Admin/Layout/Block/Core/NavBar/BlockNavBar.phpnu�[���PK9e�[�h���5C�Application/Admin/Layout/Block/Core/NavBar/NavBar.phpnu�[���PK9e�[���/ffDg�Application/Admin/Layout/Block/Core/TopBarGroup/BlockTopBarGroup.phpnu�[���PK9e�[PF��77?A�Application/Admin/Layout/Block/Core/TopBarGroup/TopBarGroup.phpnu�[���PK9e�[�Y��B��Application/Admin/Layout/Block/Core/TopBarMain/BlockTopBarMain.phpnu�[���PK9e�[�~Gyy=�Application/Admin/Layout/Block/Core/TopBarMain/TopBarMain.phpnu�[���PK9e�[,?���Y��Application/Admin/Layout/Block/Core/TopBarMain/TopBarMainEditor/BlockTopBarMainEditor.phpnu�[���PK9e�[�T�8��T�Application/Admin/Layout/Block/Core/TopBarMain/TopBarMainEditor/TopBarMainEditor.phpnu�[���PK9e�[Cz��llMt�Application/Admin/Layout/Block/Dashboard/DashboardInfo/BlockDashboardInfo.phpnu�[���PK9e�[�W{_��H]�Application/Admin/Layout/Block/Dashboard/DashboardInfo/DashboardInfo.phpnu�[���PK9e�[�E�-$$S��Application/Admin/Layout/Block/Dashboard/DashboardManager/BlockDashboardManager.phpnu�[���PK9e�[��*`))\]�Application/Admin/Layout/Block/Dashboard/DashboardManager/Boxes/BlockDashboardNewsletter.phpnu�[���PK9e�[|LS���X�Application/Admin/Layout/Block/Dashboard/DashboardManager/Boxes/BlockDashboardReview.phpnu�[���PK9e�[�K�ii\6�Application/Admin/Layout/Block/Dashboard/DashboardManager/Boxes/BlockDashboardUpgradePro.phpnu�[���PK9e�[X�� W+�Application/Admin/Layout/Block/Dashboard/DashboardManager/Boxes/DashboardNewsletter.phpnu�[���PK9e�[R�+++S��Application/Admin/Layout/Block/Dashboard/DashboardManager/Boxes/DashboardReview.phpnu�[���PK9e�[�<�_aaWiApplication/Admin/Layout/Block/Dashboard/DashboardManager/Boxes/DashboardUpgradePro.phpnu�[���PK9e�[��m�NQ!Application/Admin/Layout/Block/Dashboard/DashboardManager/DashboardManager.phpnu�[���PK9e�[��Df44>�$Application/Admin/Layout/Block/Forms/Button/AbstractButton.phpnu�[���PK9e�[�yw�33C�-Application/Admin/Layout/Block/Forms/Button/AbstractButtonLabel.phpnu�[���PK9e�[�>�P��;-1Application/Admin/Layout/Block/Forms/Button/BlockButton.phpnu�[���PK9e�[fE��@z4Application/Admin/Layout/Block/Forms/Button/BlockButtonApply.phpnu�[���PK9e�[sf�V
? 6Application/Admin/Layout/Block/Forms/Button/BlockButtonBack.phpnu�[���PK9e�[ߵ��A�7Application/Admin/Layout/Block/Forms/Button/BlockButtonCancel.phpnu�[���PK9e�[�k$�H(9Application/Admin/Layout/Block/Forms/Button/BlockButtonDashboardInfo.phpnu�[���PK9e�[c�/��?�;Application/Admin/Layout/Block/Forms/Button/BlockButtonIcon.phpnu�[���PK9e�[�V����C
?Application/Admin/Layout/Block/Forms/Button/BlockButtonIconCode.phpnu�[���PK9e�[�Z
H!!AR@Application/Admin/Layout/Block/Forms/Button/BlockButtonImport.phpnu�[���PK9e�[�@7�++@�AApplication/Admin/Layout/Block/Forms/Button/BlockButtonPlain.phpnu�[���PK9e�[O��r��DDApplication/Admin/Layout/Block/Forms/Button/BlockButtonPlainIcon.phpnu�[���PK9e�[���?�FApplication/Admin/Layout/Block/Forms/Button/BlockButtonSave.phpnu�[���PK9e�[��N�[[A1HApplication/Admin/Layout/Block/Forms/Button/BlockButtonSpacer.phpnu�[���PK9e�[�:��
�
G�JApplication/Admin/Layout/Block/Forms/FloatingMenu/BlockFloatingMenu.phpnu�[���PK9e�[����KqVApplication/Admin/Layout/Block/Forms/FloatingMenu/BlockFloatingMenuItem.phpnu�[���PK9e�[b��11T�_Application/Admin/Layout/Block/Forms/FloatingMenu/BlockFloatingMenuItemSeparator.phpnu�[���PK9e�[ڏ���BzbApplication/Admin/Layout/Block/Forms/FloatingMenu/FloatingMenu.phpnu�[���PK9e�[8Z�چ � K�eApplication/Admin/Layout/Block/Generator/GeneratorBox/BlockGeneratorBox.phpnu�[���PK9e�[�9�}��F�oApplication/Admin/Layout/Block/Generator/GeneratorBox/GeneratorBox.phpnu�[���PK9e�[nD]���:
tApplication/Admin/Layout/Block/Slide/AddLayer/AddLayer.phpnu�[���PK9e�[�Ի�WW?u�Application/Admin/Layout/Block/Slide/AddLayer/BlockAddLayer.phpnu�[���PK9e�[:
�� � I;�Application/Admin/Layout/Block/Slide/EditorOverlay/BlockEditorOverlay.phpnu�[���PK9e�[P_�c}}DX�Application/Admin/Layout/Block/Slide/EditorOverlay/EditorOverlay.phpnu�[���PK9e�[ҭ?���EI�Application/Admin/Layout/Block/Slide/LayerWindow/BlockLayerWindow.phpnu�[���PK9e�[���8''@^�Application/Admin/Layout/Block/Slide/LayerWindow/LayerWindow.phpnu�[���PK9e�[�����Y��Application/Admin/Layout/Block/Slide/LayerWindow/Settings/AbstractLayerWindowSettings.phpnu�[���PK9e�[:���W}�Application/Admin/Layout/Block/Slide/LayerWindow/Settings/LayerWindowSettingsColumn.phpnu�[���PK9e�[Է�-�-W��Application/Admin/Layout/Block/Slide/LayerWindow/Settings/LayerWindowSettingsCommon.phpnu�[���PK9e�[u�ekkX�Application/Admin/Layout/Block/Slide/LayerWindow/Settings/LayerWindowSettingsContent.phpnu�[���PK9e�[Oi�U�'Application/Admin/Layout/Block/Slide/LayerWindow/Settings/LayerWindowSettingsItem.phpnu�[���PK9e�[b���[�.Application/Admin/Layout/Block/Slide/LayerWindow/Settings/LayerWindowSettingsItemCommon.phpnu�[���PK9e�[����!�!T`KApplication/Admin/Layout/Block/Slide/LayerWindow/Settings/LayerWindowSettingsRow.phpnu�[���PK9e�[Ql���4�4V�mApplication/Admin/Layout/Block/Slide/LayerWindow/Settings/LayerWindowSettingsSlide.phpnu�[���PK9e�[e\�Q��DF�Application/Admin/Layout/Block/Slide/LayerWindow/Tab/AbstractTab.phpnu�[���PK9e�[>G�o�F�FE@�Application/Admin/Layout/Block/Slide/LayerWindow/Tab/TabAnimation.phpnu�[���PK9e�[r�����CJ�Application/Admin/Layout/Block/Slide/LayerWindow/Tab/TabContent.phpnu�[���PK9e�[�H���A��Application/Admin/Layout/Block/Slide/LayerWindow/Tab/TabGoPro.phpnu�[���PK9e�[��\��A��Application/Admin/Layout/Block/Slide/LayerWindow/Tab/TabStyle.phpnu�[���PK9e�[v�M��?��Application/Admin/Layout/Block/Slide/SlideBox/BlockSlideBox.phpnu�[���PK9e�[tiu���:AApplication/Admin/Layout/Block/Slide/SlideBox/SlideBox.phpnu�[���PK9e�[�؈"��IjApplication/Admin/Layout/Block/Slide/SlideManager/ActionBar/ActionBar.phpnu�[���PK9e�[�[)+hhN�Application/Admin/Layout/Block/Slide/SlideManager/ActionBar/BlockActionBar.phpnu�[���PK9e�[�A�C C G�Application/Admin/Layout/Block/Slide/SlideManager/AddSlide/AddSlide.phpnu�[���PK9e�[�1�՛�Lu)Application/Admin/Layout/Block/Slide/SlideManager/AddSlide/BlockAddSlide.phpnu�[���PK9e�[��BY��G�-Application/Admin/Layout/Block/Slide/SlideManager/BlockSlideManager.phpnu�[���PK9e�[�%����B�3Application/Admin/Layout/Block/Slide/SlideManager/SlideManager.phpnu�[���PK9e�[�P�C
D�KApplication/Admin/Layout/Block/Slider/DeviceZoom/BlockDeviceZoom.phpnu�[���PK9e�[�E5&&?uMApplication/Admin/Layout/Block/Slider/DeviceZoom/DeviceZoom.phpnu�[���PK9e�[GS
WWB
RApplication/Admin/Layout/Block/Slider/SliderBox/BlockSliderBox.phpnu�[���PK9e�[�9��=�ZApplication/Admin/Layout/Block/Slider/SliderBox/SliderBox.phpnu�[���PK9e�[���K�iApplication/Admin/Layout/Block/Slider/SliderManager/ActionBar/ActionBar.phpnu�[���PK9e�[{�%JaaP@lApplication/Admin/Layout/Block/Slider/SliderManager/ActionBar/BlockActionBar.phpnu�[���PK9e�[?11J!�Application/Admin/Layout/Block/Slider/SliderManager/BlockSliderManager.phpnu�[���PK9e�[�oL��E��Application/Admin/Layout/Block/Slider/SliderManager/SliderManager.phpnu�[���PK9e�[C���ccJ��Application/Admin/Layout/Block/Slider/SliderPublish/BlockPublishSlider.phpnu�[���PK9e�[��q�>��Application/Admin/Layout/Block/Slider/SliderPublish/Common.phpnu�[���PK9e�[;Z�Խ�>��Application/Admin/Layout/Block/Slider/SliderPublish/Joomla.phpnu�[���PK9e�['w��K��Application/Admin/Layout/Block/Slider/SliderPublish/JoomlaPublishSlider.phpnu�[���PK9e�[O+j??A��Application/Admin/Layout/Block/Slider/SliderPublish/WordPress.phpnu�[���PK9e�[�5y��Fm�Application/Admin/Layout/Block/Slider/SliderTrash/BlockSliderTrash.phpnu�[���PK9e�[���s��I��Application/Admin/Layout/Block/Slider/SliderTrash/BlockSliderTrashBox.phpnu�[���PK9e�[ZR��A�Application/Admin/Layout/Block/Slider/SliderTrash/SliderTrash.phpnu�[���PK9e�[W��``D,�Application/Admin/Layout/Block/Slider/SliderTrash/SliderTrashBox.phpnu�[���PK9e�[W���%%.�Application/Admin/Layout/Helper/Breadcrumb.phpnu�[���PK9e�[�J����,��Application/Admin/Layout/Helper/MenuItem.phpnu�[���PK9e�[�;9��*��Application/Admin/Layout/LayoutDefault.phpnu�[���PK9e�[�M�XX1��Application/Admin/Layout/LayoutDefaultSidebar.phpnu�[���PK9e�[%�d55)��Application/Admin/Layout/LayoutEditor.phpnu�[���PK9e�[��`:��(?�Application/Admin/Layout/LayoutEmpty.phpnu�[���PK9e�[̤�0(�Application/Admin/Layout/LayoutError.phpnu�[���PK9e�[��Zqq)��Application/Admin/Layout/LayoutIframe.phpnu�[���PK9e�[�c~��F[�Application/Admin/Preview/Block/PreviewToolbar/BlockPreviewToolbar.phpnu�[���PK9e�[�T��mmA\�Application/Admin/Preview/Block/PreviewToolbar/PreviewToolbar.phpnu�[���PK9e�[!���/:Application/Admin/Preview/ControllerPreview.phpnu�[���PK9e�[��x��+lApplication/Admin/Preview/Template/Full.phpnu�[���PK9e�[�*����,�,Application/Admin/Preview/Template/Index.phpnu�[���PK9e�[4>$���-�3Application/Admin/Preview/ViewPreviewFull.phpnu�[���PK9e�[l
.�<Application/Admin/Preview/ViewPreviewIndex.phpnu�[���PK9e�[l�p]37RApplication/Admin/Settings/AbstractViewSettings.phpnu�[���PK9e�[���ג�5�^Application/Admin/Settings/ControllerAjaxSettings.phpnu�[���PK9e�[4�"�
1�tApplication/Admin/Settings/ControllerSettings.phpnu�[���PK9e�[G����2Application/Admin/Settings/Template/ClearCache.phpnu�[���PK9e�[�P�,__-I�Application/Admin/Settings/Template/Fonts.phpnu�[���PK9e�[4��mm1�Application/Admin/Settings/Template/Framework.phpnu�[���PK9e�[���6ff/ӄApplication/Admin/Settings/Template/General.phpnu�[���PK9e�[&�+B"":��Application/Admin/Settings/Template/GeneratorConfigure.phpnu�[���PK9e�[U�b�{{4$�Application/Admin/Settings/Template/ItemDefaults.phpnu�[���PK9e�[V���
5�Application/Admin/Settings/ViewGeneratorConfigure.phpnu�[���PK9e�[9sɳ5u�Application/Admin/Settings/ViewSettingsClearCache.phpnu�[���PK9e�[�Q�,
,
0ڡApplication/Admin/Settings/ViewSettingsFonts.phpnu�[���PK9e�[H�*�
�
4f�Application/Admin/Settings/ViewSettingsFramework.phpnu�[���PK9e�[��N
'
'2��Application/Admin/Settings/ViewSettingsGeneral.phpnu�[���PK9e�[@�~DD7/�Application/Admin/Settings/ViewSettingsItemDefaults.phpnu�[���PK9e�[�b'+�/�/1��Application/Admin/Slider/ControllerAjaxSlider.phpnu�[���PK9e�[�\��
�
-�Application/Admin/Slider/ControllerSlider.phpnu�[���PK9e�[l�U??3@7Application/Admin/Slider/Template/AjaxSliderBox.phpnu�[���PK9e�[}�����*�8Application/Admin/Slider/Template/Edit.phpnu�[���PK9e�[��%��0.<Application/Admin/Slider/Template/SimpleEdit.phpnu�[���PK9e�[�T��8)QApplication/Admin/Slider/Template/SimpleEditAddSlide.phpnu�[���PK9e�[Re#�.@]Application/Admin/Slider/ViewAjaxSliderBox.phpnu�[���PK9e�[%�$�$$+�_Application/Admin/Slider/ViewSliderEdit.phpnu�[���PK9e�[R3��10}Application/Admin/Slider/ViewSliderSimpleEdit.phpnu�[���PK9e�[O��X X 9M�Application/Admin/Slider/ViewSliderSimpleEditAddSlide.phpnu�[���PK9e�[@-�cmm3�Application/Admin/Sliders/ControllerAjaxSliders.phpnu�[���PK9e�[n$��/Application/Admin/Sliders/ControllerSliders.phpnu�[���PK9e�[|�G
3B�Application/Admin/Sliders/Pro/Template/Activate.phpnu�[���PK9e�[������5��Application/Admin/Sliders/Pro/ViewSlidersActivate.phpnu�[���PK9e�[�z��5�Application/Admin/Sliders/Template/GettingStarted.phpnu�[���PK9e�[Pq9�hh-.�Application/Admin/Sliders/Template/Import.phpnu�[���PK9e�[�Iј��7��Application/Admin/Sliders/ViewSlidersGettingStarted.phpnu�[���PK9e�[�"i6��/T�Application/Admin/Sliders/ViewSlidersImport.phpnu�[���PK9e�[��*��.��Application/Admin/Sliders/ViewSlidersIndex.phpnu�[���PK9e�[gI���.��Application/Admin/Sliders/ViewSlidersTrash.phpnu�[���PK9e�[)�0�-�-1�Application/Admin/Slides/ControllerAjaxSlides.phpnu�[���PK9e�[�����-�#Application/Admin/Slides/ControllerSlides.phpnu�[���PK9e�[7bl��2
0Application/Admin/Slides/Template/AjaxSlideBox.phpnu�[���PK9e�[���*1Application/Admin/Slides/Template/Edit.phpnu�[���PK9e�[a�<-�=Application/Admin/Slides/ViewAjaxSlideBox.phpnu�[���PK9e�[���k�$�$+qEApplication/Admin/Slides/ViewSlidesEdit.phpnu�[���PK9e�[��)e=e=#�jApplication/Admin/TraitAdminUrl.phpnu�[���PK9e�[�o����-p�Application/Admin/Update/ControllerUpdate.phpnu�[���PK9e�[��
�
/��Application/Admin/Visuals/ControllerAjaxCss.phpnu�[���PK9e�[e�u8##'�Application/ApplicationSmartSlider3.phpnu�[���PK9e�[�����0d�Application/Frontend/ApplicationTypeFrontend.phpnu�[���PK9e�[����9��Application/Frontend/Slider/ControllerPreRenderSlider.phpnu�[���PK9e�[�aO݃�0��Application/Frontend/Slider/ControllerSlider.phpnu�[���PK9e�[cb���/��Application/Frontend/Slider/Template/Iframe.phpnu�[���PK9e�[=Ȫ��+�Application/Frontend/Slider/ViewDisplay.phpnu�[���PK9e�[�}�V��*T�Application/Frontend/Slider/ViewIframe.phpnu�[���PK9e�[��jj*@�Application/Helper/HelperSliderChanged.phpnu�[���PK9e�[�5a\�M�M$�Application/Model/ModelGenerator.phpnu�[���PK9e�[1 'LL"@ Application/Model/ModelLicense.phpnu�[���PK9e�[-}��#�L Application/Model/ModelSettings.phpnu�[���PK9e�[>a36T6T"R Application/Model/ModelSliders.phpnu�[���PK9e�[������&�� Application/Model/ModelSlidersXRef.phpnu�[���PK9e�[yQ��UYUY!�� Application/Model/ModelSlides.phpnu�[���PK9e�[ZN����2G
BackgroundAnimation/BackgroundAnimationManager.phpnu�[���PK9e�[�E
2�
BackgroundAnimation/BackgroundAnimationStorage.phpnu�[���PK9e�[��ccX$
BackgroundAnimation/Block/BackgroundAnimationManager/BlockBackgroundAnimationManager.phpnu�[���PK9e�[��.�cc>�*
BackgroundAnimation/Block/BackgroundAnimationManager/Index.phpnu�[���PK9e�[q̱yee9�/
BackgroundAnimation/ControllerAjaxBackgroundAnimation.phpnu�[���PK9e�[���0�1
BackgroundAnimation/ModelBackgroundAnimation.phpnu�[���PK9e�[iFZQ���7
BackupSlider/BackupData.phpnu�[���PK9e�[�sgM�I�I�9
BackupSlider/ExportSlider.phpnu�[���PK9e�[�\ �o-o-y�
BackupSlider/ImportSlider.phpnu�[���PK9e�[�Qs��5�
Conflict/Conflict.phpnu�[���PK9e�[�y�H��"E�
Conflict/Joomla/JoomlaConflict.phpnu�[���PK9e�[���AA$(�
Form/Element/BackgroundAnimation.phpnu�[���PK9e�[���pp
��
Form/Element/BackgroundImage.phpnu�[���PK9e�[�����}�
Form/Element/Columns.phpnu�[���PK9e�[C�u166"��
Form/Element/ControlTypePicker.phpnu�[���PK9e�[�@|�VV�
Form/Element/DatePicker.phpnu�[���PK9e�[�%��
Form/Element/Group/WidgetPosition.phpnu�[���PK9e�[�$zpp�
Form/Element/PublishSlider.phpnu�[���PK9e�[Ѝ�P��
�
Form/Element/Radio/FlexAlign.phpnu�[���PK9e�[h|Cu��&�
Form/Element/Radio/HorizontalAlign.phpnu�[���PK9e�[��J�!��
Form/Element/Radio/InnerAlign.phpnu�[���PK9e�[���ll$KForm/Element/Radio/VerticalAlign.phpnu�[���PK9e�[t�S+��-Form/Element/Select/ResponsiveSubFormIcon.phpnu�[���PK9e�[��K%//6Form/Element/WidgetArea.phpnu�[���PK9e�[�� �
�
�Generator/AbstractGenerator.phpnu�[���PK9e�[*
�*e
e
$�Generator/AbstractGeneratorGroup.phpnu�[���PK9e�[�=��771[%Generator/AbstractGeneratorGroupConfiguration.phpnu�[���PK9e�[�O���%�)Generator/AbstractGeneratorLoader.phpnu�[���PK9e�[\��0��*;-Generator/Common/GeneratorCommonLoader.phpnu�[���PK9e�[ۏo��K.Generator/Generator.phpnu�[���PK9e�[�:�Q''HDGenerator/GeneratorFactory.phpnu�[���PK9e�[㜆.��*�HGenerator/Joomla/GeneratorJoomlaLoader.phpnu�[���PK9e�[�����E�IGenerator/Joomla/JoomlaContent/Elements/JoomlaContentAccessLevels.phpnu�[���PK9e�[/[��HHC�MGenerator/Joomla/JoomlaContent/Elements/JoomlaContentCategories.phpnu�[���PK9e�[
dm�00=�TGenerator/Joomla/JoomlaContent/Elements/JoomlaContentTags.phpnu�[���PK9e�[����"">=XGenerator/Joomla/JoomlaContent/GeneratorGroupJoomlaContent.phpnu�[���PK9e�[�wȞ�A�A?�[Generator/Joomla/JoomlaContent/Sources/JoomlaContentArticle.phpnu�[���PK9e�[�g�ss@�Generator/Joomla/JoomlaContent/Sources/JoomlaContentCategory.phpnu�[���PK9e�[q v�����Install/Install.phpnu�[���PK9e�[Ro^}}
��Install/Joomla/InstallJoomla.phpnu�[���PK9e�[O?�7'7'u�Install/Tables.phpnu�[���PK9e�[�ڛ88�Parser/Link/NextSlide.phpnu�[���PK9e�[&�״@@o�Parser/Link/PreviousSlide.phpnu�[���PK9e�[�o#G??��Parser/Link/SlideEvent.phpnu�[���PK9e�[D4Qqq��Parser/Link/ToSlide.phpnu�[���PK9e�[���oo=�Parser/Link/ToSlideID.phpnu�[���PK9e�[ ��i??)��Platform/AbstractSmartSlider3Platform.phpnu�[���PK9e�[YJ�- - *��Platform/Joomla/AdministratorComponent.phpnu�[���PK9e�[X�`���Platform/Joomla/compat.phpnu�[���PK9e�[��omm!�Platform/Joomla/ImageFallback.phpnu�[���PK9e�[�_�8�(�(!��Platform/Joomla/Joomla3Assets.phpnu�[���PK9e�[OQ�X��
�
Platform/Joomla/JoomlaModule.phpnu�[���PK9e�[���(
Platform/Joomla/JoomlaShim.phpnu�[���PK9e�[ʉr��0�(
Platform/Joomla/Module/Field/FieldEditSlider.phpnu�[���PK9e�[�쟣�6,
Platform/Joomla/Plugin/PluginInstallerSmartSlider3.phpnu�[���PK9e�[op�c66-1
Platform/Joomla/Plugin/PluginSmartSlider3.phpnu�[���PK9e�[�
::.�E
Platform/Joomla/SmartSlider3PlatformJoomla.phpnu�[���PK9e�[�����!9H
Platform/SmartSlider3Platform.phpnu�[���PK9e�[u���TK
PublicApi/Project.phpnu�[���PK9e�[�c��!=Q
Renderable/AbstractRenderable.phpnu�[���PK9e�[l��R��&a
Renderable/AbstractRenderableOwner.phpnu�[���PK9e�[bi�{�{*Om
Renderable/Component/AbstractComponent.phpnu�[���PK9e�[o�D�6868%G�
Renderable/Component/ComponentCol.phpnu�[���PK9e�[]��3��)�!Renderable/Component/ComponentContent.phpnu�[���PK9e�[�Gs���'�=Renderable/Component/ComponentLayer.phpnu�[���PK9e�[ǝeny<y<%JRenderable/Component/ComponentRow.phpnu�[���PK9e�[:��*AA'�Renderable/Component/ComponentSlide.phpnu�[���PK9e�[6��x��~�Renderable/Component/Style.phpnu�[���PK9e�[���??!L�Renderable/ComponentContainer.phpnu�[���PK9e�[cR>-bb
ܲRenderable/Item/AbstractItem.phpnu�[���PK9e�[C[�%��(��Renderable/Item/AbstractItemFrontend.phpnu�[���PK9e�[Ă
Att%��Renderable/Item/Button/ItemButton.phpnu�[���PK9e�[�w��
�
-c�Renderable/Item/Button/ItemButtonFrontend.phpnu�[���PK9e�[cӍ-�(�('^�Renderable/Item/Heading/ItemHeading.phpnu�[���PK9e�[�~b���/O%Renderable/Item/Heading/ItemHeadingFrontend.phpnu�[���PK9e�[�|��#�4Renderable/Item/Image/ItemImage.phpnu�[���PK9e�[�`��+�RRenderable/Item/Image/ItemImageFrontend.phpnu�[���PK9e�[�|�p���[Renderable/Item/ItemFactory.phpnu�[���PK9e�[ܾj;00'�pRenderable/Item/Missing/ItemMissing.phpnu�[���PK9e�[㯥��/:sRenderable/Item/Missing/ItemMissingFrontend.phpnu�[���PK9e�[�N�=��!(uRenderable/Item/Text/ItemText.phpnu�[���PK9e�[���m>m>)�Renderable/Item/Text/ItemTextFrontend.phpnu�[���PK9e�[)���&�&#��Renderable/Item/Vimeo/ItemVimeo.phpnu�[���PK9e�[��5���+��Renderable/Item/Vimeo/ItemVimeoFrontend.phpnu�[���PK9e�[�ɺ�%%'�Renderable/Item/YouTube/ItemYouTube.phpnu�[���PK9e�[5�K=22/M-Renderable/Item/YouTube/ItemYouTubeFrontend.phpnu�[���PK9e�[{�t��*�IRenderable/Placement/AbstractPlacement.phpnu�[���PK9e�[��nO��*2MRenderable/Placement/PlacementAbsolute.phpnu�[���PK9e�[��Q0��)SRenderable/Placement/PlacementDefault.phpnu�[���PK9e�[����(=TRenderable/Placement/PlacementNormal.phpnu�[���PK9e�[nk}�tt�cSettings.phpnu�[���PK9e�[`VK
)ThSlideBuilder/AbstractBuilderComponent.phpnu�[���PK9e�[�4k//$�kSlideBuilder/BuilderComponentCol.phpnu�[���PK:e�[ؔذ��(=pSlideBuilder/BuilderComponentContent.phpnu�[���PK:e�[����%&tSlideBuilder/BuilderComponentItem.phpnu�[���PK:e�[s�&&&xSlideBuilder/BuilderComponentLayer.phpnu�[���PK:e�[̷mll$��SlideBuilder/BuilderComponentRow.phpnu�[���PK:e�[�.O~��&[�SlideBuilder/BuilderComponentSlide.phpnu�[���PK:e�[(���IIm�Slider/Admin/AdminSlide.phpnu�[���PK:e�[��'���Slider/Admin/AdminSlider.phpnu�[���PK:e�[��i���=�Slider/Admin/AdminSlides.phpnu�[���PK:e�[av]���"v�Slider/Base/PlatformSliderBase.phpnu�[���PK:e�[�
���#e�Slider/Base/PlatformSliderTrait.phpnu�[���PK:e�[�h��g�Slider/Cache/CacheGenerator.phpnu�[���PK:e�[<{���ϲSlider/Cache/CacheSlider.phpnu�[���PK:e�[ͭѕ����Slider/Feature/Align.phpnu�[���PK:e�[𠤻``��Slider/Feature/Autoplay.phpnu�[���PK:e�[��f
��"<�Slider/Feature/BlockRightClick.phpnu�[���PK:e�[�/$
6�Slider/Feature/Controls.phpnu�[���PK:e�[��tt��Slider/Feature/Focus.phpnu�[���PK:e�[�NP**]�Slider/Feature/LayerMode.phpnu�[���PK:e�[F}NJ}}��Slider/Feature/LazyLoad.phpnu�[���PK:e�[Φ��"��Slider/Feature/MaintainSession.phpnu�[���PK:e�[A�h9����Slider/Feature/Margin.phpnu�[���PK:e�[���i+i+�Slider/Feature/Optimize.phpnu�[���PK:e�[e?^�VV*M,Slider/Feature/PostBackgroundAnimation.phpnu�[���PK:e�[�bͼ�����7Slider/Feature/Responsive.phpnu�[���PK:e�[�]�-MM"лSlider/Feature/SlideBackground.phpnu�[���PK:e�[�Ҋ�9 Slider/Feature/TranslateUrl.phpnu�[���PK:e�[�
����Slider/FeatureManager.phpnu�[���PK:e�[SJ����
$$Slider/Joomla/PlatformSlider.phpnu�[���PK:e�[=HJ���0�&Slider/ResponsiveType/AbstractResponsiveType.phpnu�[���PK:e�[���.��5:)Slider/ResponsiveType/AbstractResponsiveTypeAdmin.phpnu�[���PK:e�[��BB8�,Slider/ResponsiveType/AbstractResponsiveTypeFrontend.phpnu�[���PK:e�[�/���14/Slider/ResponsiveType/Auto/ResponsiveTypeAuto.phpnu�[���PK:e�[����6x1Slider/ResponsiveType/Auto/ResponsiveTypeAutoAdmin.phpnu�[���PK:e�[|W b||9n7Slider/ResponsiveType/Auto/ResponsiveTypeAutoFrontend.phpnu�[���PK:e�[?��.��;S:Slider/ResponsiveType/FullWidth/ResponsiveTypeFullWidth.phpnu�[���PK:e�[�X @�<Slider/ResponsiveType/FullWidth/ResponsiveTypeFullWidthAdmin.phpnu�[���PK:e�[c�B���CAFSlider/ResponsiveType/FullWidth/ResponsiveTypeFullWidthFrontend.phpnu�[���PK:e�[�f��/�ISlider/ResponsiveType/ResponsiveTypeFactory.phpnu�[���PK:e�[$2aT�T��QSlider/Slide.phpnu�[���PK:e�[�8ޖ�5�5T�Slider/Slider.phpnu�[���PK:e�[����1�1�Slider/SliderParams.phpnu�[���PK:e�[��UU(�BSlider/SliderType/AbstractSliderType.phpnu�[���PK:e�[�I8-8GSlider/SliderType/AbstractSliderTypeAdmin.phpnu�[���PK:e�[�P��+�LSlider/SliderType/AbstractSliderTypeCss.phpnu�[���PK:e�[.�kyFyF0�bSlider/SliderType/AbstractSliderTypeFrontend.phpnu�[���PK:e�[�rq��+��Slider/SliderType/Block/SliderTypeBlock.phpnu�[���PK:e�[wE�)0
�Slider/SliderType/Block/SliderTypeBlockAdmin.phpnu�[���PK;e�[/����.m�Slider/SliderType/Block/SliderTypeBlockCss.phpnu�[���PK;e�[Ӱ!��3\�Slider/SliderType/Block/SliderTypeBlockFrontend.phpnu�[���PK;e�[�k�-��Slider/SliderType/Simple/SliderTypeSimple.phpnu�[���PK;e�[��V�R=R=2��Slider/SliderType/Simple/SliderTypeSimpleAdmin.phpnu�[���PK;e�[��
�
0�#Slider/SliderType/Simple/SliderTypeSimpleCss.phpnu�[���PK;e�[�}���5�.Slider/SliderType/Simple/SliderTypeSimpleFrontend.phpnu�[���PK;e�[.��� '�NSlider/SliderType/SliderTypeFactory.phpnu�[���PK;e�[%e�tt�WSlider/SliderType/SVGFlip.phpnu�[���PK;e�[���
�mSlider/Slides.phpnu�[���PK;e�[Di����SliderManager/SliderManager.phpnu�[���PK;e�[��7dOO�SmartSlider3.phpnu�[���PK;e�[�v���q�SmartSlider3Info.phpnu�[���PK;e�[�2�moo��Storage.phpnu�[���PK;e�[������Y�Widget/AbstractWidget.phpnu�[���PK;e�[�1~��!X�Widget/AbstractWidgetFrontend.phpnu�[���PK;e�[��)���$<�Widget/Arrow/AbstractWidgetArrow.phpnu�[���PK;e�[�\��
�
&]�Widget/Arrow/ArrowImage/ArrowImage.phpnu�[���PK;e�[O�["^*^*.=Widget/Arrow/ArrowImage/ArrowImageFrontend.phpnu�[���PK;e�[WcK���*�.Widget/Autoplay/AbstractWidgetAutoplay.phpnu�[���PK;e�[��xA&&/)0Widget/Autoplay/AutoplayImage/AutoplayImage.phpnu�[���PK;e�[��G��7�CWidget/Autoplay/AutoplayImage/AutoplayImageFrontend.phpnu�[���PK;e�[u_,L��
�]Widget/Bar/AbstractWidgetBar.phpnu�[���PK;e�[�oM��*�^Widget/Bar/BarHorizontal/BarHorizontal.phpnu�[���PK;e�[�M�XX2�uWidget/Bar/BarHorizontal/BarHorizontalFrontend.phpnu�[���PK;e�[*K�**
��Widget/Bullet/AbstractBullet.phpnu�[���PK;e�[&��xx(�Widget/Bullet/AbstractBulletFrontend.phpnu�[���PK;e�[�Q�
��3�Widget/Bullet/BulletTransition/BulletTransition.phpnu�[���PK;e�[�ڻ�;�Widget/Bullet/BulletTransition/BulletTransitionFrontend.phpnu�[���PK;e�[��W�44$�Widget/Group/AbstractWidgetGroup.phpnu�[���PK;e�[`;
���Widget/Group/Arrow.phpnu�[���PK;e�['�*qbb��Widget/Group/Autoplay.phpnu�[���PK;e�[5DV� � ��Widget/Group/Bar.phpnu�[���PK;e�[$T�fJJ��Widget/Group/Bullet.phpnu�[���PK;e�[_cV\\X�Widget/Group/Shadow.phpnu�[���PK;e�[T)��tt��Widget/Group/Thumbnail.phpnu�[���PK;e�[j(ɲ��&�Widget/Shadow/AbstractWidgetShadow.phpnu�[���PK;e�[��s���)�Widget/Shadow/ShadowImage/ShadowImage.phpnu�[���PK;e�[m�1Pll14
Widget/Shadow/ShadowImage/ShadowImageFrontend.phpnu�[���PK;e�[�l�~~Widget/SliderWidget.phpnu�[���PK;e�[�l;SB'B')�*Widget/Thumbnail/Basic/ThumbnailBasic.phpnu�[���PK;e�[Y��551aRWidget/Thumbnail/Basic/ThumbnailBasicFrontend.phpnu�[���PK;e�[�8�O??هWidget/WidgetGroupFactory.phpnu�[���PK;e�[W��e�Widget/WidgetPlacement.phpnu�[���PK;e�[R)e�
�
"ǎWidget/WidgetPlacementAdvanced.phpnu�[���PK;e�[������
��Widget/WidgetPlacementSimple.phpnu�[���PK���Ԟ