| Current Path : /home/digilove/public_html/41423/ |
| Current File : //home/digilove/public_html/41423/SmartSlider3Pro.tar |
SmartSlider3Pro.php 0000644 00000002253 15235523313 0010256 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro;
use Nextend\Framework\Pattern\SingletonTrait;
use Nextend\Framework\Plugin;
use Nextend\SmartSlider3\Application\ApplicationSmartSlider3;
use Nextend\SmartSlider3Pro\Application\PluggedApplicationSmartSlider3Pro;
use Nextend\SmartSlider3Pro\Generator\GeneratorLoader;
use Nextend\SmartSlider3Pro\Renderable\Item\ItemLoader;
use Nextend\SmartSlider3Pro\Slider\ResponsiveTypeLoader;
use Nextend\SmartSlider3Pro\Slider\SliderTypeLoader;
use Nextend\SmartSlider3Pro\Widget\WidgetLoader;
class SmartSlider3Pro {
use SingletonTrait;
protected function init() {
Plugin::addAction('PluggableApplication\Nextend\SmartSlider3\Application\ApplicationSmartSlider3', array(
$this,
'plugSmartSlider3Pro'
));
new SliderTypeLoader();
new ResponsiveTypeLoader();
new WidgetLoader();
new GeneratorLoader();
new ItemLoader();
}
/**
* @param ApplicationSmartSlider3 $application
*/
public function plugSmartSlider3Pro($application) {
new PluggedApplicationSmartSlider3Pro($application);
}
} Renderable/Joomla/Item/JoomlaModule/ItemJoomlaModule.php 0000644 00000004647 15235523313 0017251 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Renderable\Joomla\Item\JoomlaModule;
use Nextend\Framework\Form\Element\Message\Warning;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Fieldset;
use Nextend\SmartSlider3\Renderable\Item\AbstractItem;
class ItemJoomlaModule extends AbstractItem {
protected $ordering = 101;
protected function isBuiltIn() {
return true;
}
public function getType() {
return 'joomlamodule';
}
public function getTitle() {
return n2_('Joomla module');
}
public function getIcon() {
return 'ssi_32 ssi_32--joomla';
}
public function getGroup() {
return n2_x('Advanced', 'Layer group');
}
public function createFrontend($id, $itemData, $layer) {
return new ItemJoomlaModuleFrontend($this, $id, $itemData, $layer);
}
public function getValues() {
return parent::getValues() + array(
'positiontype' => 'loadposition',
'positionvalue' => ''
);
}
public function renderFields($container) {
$settings = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-joomlamodule', n2_('General'));
new Warning($settings, '', sprintf(n2_('Please note, that %1$swe do not support%2$s the Joomla module layer!%3$sThe loaded module often needs code customizations what you have to do yourself, so we only suggest using this layer if you are a developer!'), '<b>', '</b>', '<br>'));
new Select($settings, 'positiontype', n2_('Type'), 'loadposition', array(
'options' => array(
'loadposition' => 'Loadposition - Content plugin',
'loadmoduleid' => 'Loadmoduleid - Content plugin',
'module' => 'Module - Modules Anywhere',
'modulepos' => 'Modulepos - Modules Anywhere'
)
));
new Text($settings, 'positionvalue', n2_('Value'), '', array(
'style' => 'width:302px;',
'tipLabel' => n2_('Position name or module ID'),
'tipDescription' => n2_('The position name of your module (for Loadposition and Modulepos) or the module\'s ID (Module).'),
'tipLink' => 'https://smartslider.helpscoutdocs.com/article/1853-joomla-module-layer'
));
}
} Renderable/Joomla/Item/JoomlaModule/ItemJoomlaModuleFrontend.php 0000644 00000000771 15235523313 0020743 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Renderable\Joomla\Item\JoomlaModule;
use Nextend\SmartSlider3\Renderable\Item\AbstractItemFrontend;
class ItemJoomlaModuleFrontend extends AbstractItemFrontend {
public function render() {
return '<div class="n2-ss-item-content n2-ow">{' . $this->data->get('positiontype', '') . ' ' . $this->data->get('positionvalue', '') . '}</div>';
}
public function renderAdminTemplate() {
return $this->render();
}
} Renderable/Item/ItemLoader.php 0000644 00000005245 15235523313 0012253 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Renderable\Item;
use Nextend\Framework\Plugin;
use Nextend\SmartSlider3\Platform\Joomla\JoomlaShim;
use Nextend\SmartSlider3\Renderable\Item\ItemFactory;
use Nextend\SmartSlider3Pro\Renderable\Item\AnimatedHeading\ItemAnimatedHeading;
use Nextend\SmartSlider3Pro\Renderable\Item\Area\ItemArea;
use Nextend\SmartSlider3Pro\Renderable\Item\Audio\ItemAudio;
use Nextend\SmartSlider3Pro\Renderable\Item\BeforeAfter\ItemBeforeAfter;
use Nextend\SmartSlider3Pro\Renderable\Item\Caption\ItemCaption;
use Nextend\SmartSlider3Pro\Renderable\Item\CircleCounter\ItemCircleCounter;
use Nextend\SmartSlider3Pro\Renderable\Item\Counter\ItemCounter;
use Nextend\SmartSlider3Pro\Renderable\Item\Countdown\ItemCountdown;
use Nextend\SmartSlider3Pro\Renderable\Item\HighlightedHeading\ItemHighlightedHeading;
use Nextend\SmartSlider3Pro\Renderable\Item\Html\ItemHtml;
use Nextend\SmartSlider3Pro\Renderable\Item\HtmlList\ItemHtmlList;
use Nextend\SmartSlider3Pro\Renderable\Item\Icon\ItemIcon;
use Nextend\SmartSlider3Pro\Renderable\Item\Iframe\ItemIframe;
use Nextend\SmartSlider3Pro\Renderable\Item\ImageArea\ItemImageArea;
use Nextend\SmartSlider3Pro\Renderable\Item\ImageBox\ItemImageBox;
use Nextend\SmartSlider3Pro\Renderable\Item\Input\ItemInput;
use Nextend\SmartSlider3Pro\Renderable\Item\ProgressBar\ItemProgressBar;
use Nextend\SmartSlider3Pro\Renderable\Item\Transition\ItemTransition;
use Nextend\SmartSlider3Pro\Renderable\Item\Video\ItemVideo;
use Nextend\SmartSlider3Pro\Renderable\Joomla\Item\JoomlaModule\ItemJoomlaModule;
class ItemLoader {
public function __construct() {
Plugin::addAction('PluggableFactoryRenderableItem', array(
$this,
'renderableItems'
));
}
/**
* @param ItemFactory $factory
*/
public function renderableItems($factory) {
new ItemAnimatedHeading($factory);
new ItemArea($factory);
new ItemAudio($factory);
new ItemCaption($factory);
new ItemCircleCounter($factory);
new ItemCounter($factory);
new ItemCountdown($factory);
new ItemHighlightedHeading($factory);
new ItemHtml($factory);
new ItemIcon($factory);
new ItemIframe($factory);
new ItemImageArea($factory);
new ItemImageBox($factory);
new ItemInput($factory);
new ItemHtmlList($factory);
new ItemProgressBar($factory);
new ItemTransition($factory);
new ItemVideo($factory);
new ItemBeforeAfter($factory);
if (!JoomlaShim::$isJoomla4) {
new ItemJoomlaModule($factory);
}
}
} Renderable/Item/Video/ItemVideo.php 0000644 00000021610 15235523313 0013153 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\Video;
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\Video;
use Nextend\Framework\Form\Fieldset;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\SmartSlider3\Renderable\Item\AbstractItem;
class ItemVideo extends AbstractItem {
protected $ordering = 20;
protected $layerProperties = array(
"desktopportraitwidth" => 300,
"desktopportraitheight" => 'auto'
);
protected function isBuiltIn() {
return true;
}
public function getType() {
return 'video';
}
public function getTitle() {
return n2_('Video');
}
public function getIcon() {
return 'ssi_32 ssi_32--video';
}
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 ItemVideoFrontend($this, $id, $itemData, $layer);
}
/**
* @return array
*/
public function getValues() {
return parent::getValues() + array(
'autoplay' => 0,
'video_mp4' => '',
'aspect-ratio' => '16:9',
'scroll-pause' => 'partly-visible',
'showcontrols' => 1,
'volume' => 1,
'loop' => 0,
'reset' => 0,
'videoplay' => '',
'videopause' => '',
'videoend' => '',
'ended' => '',
'playbutton' => 1,
'playbuttonwidth' => 48,
'playbuttonheight' => 48,
'playbuttonimage' => '',
'poster' => ''
);
}
public function getFilled($slide, $data) {
$data = parent::getFilled($slide, $data);
$data->set('poster', $slide->fill($data->get('poster', '')));
$data->set('video_mp4', $slide->fill($data->get('video_mp4', '')));
return $data;
}
public function prepareExport($export, $data) {
parent::prepareExport($export, $data);
$export->addImage($data->get('poster'));
$export->addImage($data->get('video_mp4'));
$export->addImage($data->get('playbuttonimage'));
}
public function prepareImport($import, $data) {
$data = parent::prepareImport($import, $data);
$data->set('poster', $import->fixImage($data->get('poster')));
$data->set('video_mp4', $import->fixImage($data->get('video_mp4')));
$data->set('playbuttonimage', $import->fixImage($data->get('playbuttonimage')));
return $data;
}
public function prepareSample($data) {
$data->set('poster', ResourceTranslator::toUrl($data->get('poster')));
$data->set('video_mp4', ResourceTranslator::toUrl($data->get('video_mp4')));
return $data;
}
public function renderFields($container) {
$settings = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-video', n2_('General'));
new Video($settings, 'video_mp4', n2_('MP4 video'), '', array(
'width' => 220
));
new FieldImage($settings, 'poster', 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_videoaspect-ratio-width',
'item_videoaspect-ratio-height'
)
),
array(
'values' => array(
'fill'
),
'field' => array(
'item_videoaspect-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-video-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_videoautoplay-notice'
)
));
new Select($misc, 'ended', n2_('When ended'), '', array(
'options' => array(
'' => n2_('Do nothing'),
'next' => n2_('Go to next slide')
)
));
new OnOff($misc, 'loop', n2_x('Loop', 'Video/Audio play'), 0, array(
'relatedFieldsOff' => array(
'item_videoended'
)
));
new Select($misc, 'volume', n2_('Volume'), 1, array(
'options' => array(
'0' => n2_('Mute'),
'0.25' => '25%',
'0.5' => '50%',
'0.75' => '75%',
'1' => '100%'
)
));
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-video-display', n2_('Display'));
new Select($display, 'fill-mode', n2_('Fill mode'), 'cover', array(
'options' => array(
'cover' => n2_('Fill'),
'contain' => n2_('Fit')
)
));
new OnOff($display, 'showcontrols', n2_('Controls'), 0);
$load = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-video-dev', n2_('Loading'));
new Select($load, 'preload', n2_('Preload'), 'metadata', array(
'options' => array(
'auto' => 'Auto',
'metadata' => 'metadata',
'none' => n2_('None')
)
));
new Select($load, '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')
));
$playButton = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-video-playbutton', n2_('Play button'));
new OnOff($playButton, 'playbutton', n2_('Play button'), 1, array(
'relatedFieldsOn' => array(
'item_videoplaybuttonwidth',
'item_videoplaybuttonheight',
'item_videoplaybuttonimage',
)
));
new Text\Number($playButton, 'playbuttonwidth', n2_('Width'), 48, array(
'unit' => 'px',
'wide' => 4
));
new Text\Number($playButton, 'playbuttonheight', n2_('Height'), 48, array(
'unit' => 'px',
'wide' => 4
));
new FieldImage($playButton, 'playbuttonimage', n2_('Image'), '', array(
'width' => 220
));
}
} Renderable/Item/Video/ItemVideoFrontend.php 0000644 00000015753 15235523313 0014666 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\Video;
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\AbstractRenderableOwner;
use Nextend\SmartSlider3\Renderable\Item\AbstractItemFrontend;
class ItemVideoFrontend extends AbstractItemFrontend {
public function render() {
$owner = $this->layer->getOwner();
$aspectRatio = $this->data->get('aspect-ratio', '16:9');
$hasImage = 0;
$poster = $owner->fill($this->data->get('poster'));
$coverImage = '';
if (!empty($poster)) {
$coverImage = $owner->renderImage($this, $poster, 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' => ''
), $coverImage . $playImage);
}
$owner->addScript('new _N2.FrontendItemVideo(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(
'class' => 'n2_ss_video_player n2-ss-item-content n2-ss-item-video-container n2-ow-all',
'data-aspect-ratio' => $aspectRatio
), '<div class="n2_ss_video_player__placeholder" ' . $style . '></div>' . Html::tag("video", $this->setOptions($this->data, $this->id), $this->setContent($owner, $this->data)) . $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-ss-item-content n2-ss-item-video-container n2-ow-all',
'data-aspect-ratio' => $aspectRatio,
"style" => 'background: URL(' . ResourceTranslator::toUrl($this->data->getIfEmpty('poster', '$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>' : ''));
}
/**
* @param $data Data
* @param $id
*
* @return array
*/
private function setOptions($data, $id) {
$videoOptions = array(
'style' => '',
'class' => 'n2-ow intrinsic-ignore data-tf-not-load n2-' . $data->get("fill-mode", 'cover'),
'encode' => false,
'controlsList' => 'nodownload'
);
$videoOptions["data-volume"] = $data->get("volume", 1);
if ($videoOptions["data-volume"] == 0) {
$videoOptions['muted'] = 'muted';
}
$videoOptions['playsinline'] = 1;
$videoOptions['webkit-playsinline'] = 1;
if ($data->get('loop')) {
$videoOptions['loop'] = 'loop';
}
$videoOptions["id"] = $id;
if ($data->get("showcontrols")) {
$videoOptions["controls"] = "yes";
} else {
$videoOptions["style"] .= "pointer-events:none;";
}
$videoOptions["preload"] = $data->get("preload", "auto");
return $videoOptions;
}
/**
* @param $owner AbstractRenderableOwner
* @param $data Data
*
* @return string
*/
private function setContent($owner, $data) {
$videoContent = "";
if ($data->get("video_mp4", false)) {
$videoContent .= Html::tag("source", array(
"src" => ResourceTranslator::toUrl($owner->fill($data->get("video_mp4"))),
"type" => "video/mp4"
), '', false);
}
return $videoContent;
}
} Renderable/Item/Transition/ItemTransition.php 0000644 00000014365 15235523313 0015334 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\Transition;
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\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 ItemTransition extends AbstractItem {
protected $ordering = 5;
protected $layerProperties = array("desktopportraitwidth" => 200);
protected function isBuiltIn() {
return true;
}
public function getType() {
return 'transition';
}
public function getTitle() {
return n2_('Transition');
}
public function getIcon() {
return 'ssi_32 ssi_32--transition';
}
public function getGroup() {
return n2_x('Special', 'Layer group');
}
public function createFrontend($id, $itemData, $layer) {
return new ItemTransitionFrontend($this, $id, $itemData, $layer);
}
public function loadResources($renderable) {
parent::loadResources($renderable);
$renderable->addLess(self::getAssetsPath() . "/transition.n2less", array(
"sliderid" => $renderable->elementId
));
}
public function getValues() {
return parent::getValues() + array(
'animation' => 'Fade',
'image' => '$ss3-frontend$/images/placeholder/image.png',
'image2' => '$ss3-frontend$/images/placeholder/video.png',
'alt' => '',
'alt2' => '',
'href' => '#',
'href-target' => '_self',
'href-rel' => '',
'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('image2', $slide->fill($data->get('image2', '')));
$data->set('alt', $slide->fill($data->get('alt', '')));
$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->addImage($data->get('image2'));
$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('image2', $import->fixImage($data->get('image2', '')));
$data->set('href', $import->fixLightbox($data->get('href')));
return $data;
}
public function prepareSample($data) {
$data->set('image', ResourceTranslator::toUrl($data->get('image')));
$data->set('image2', ResourceTranslator::toUrl($data->get('image2')));
return $data;
}
public function renderFields($container) {
$settings = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-transition', n2_('General'));
new FieldImage($settings, 'image', n2_('Front image'), '', array(
'relatedAlt' => 'item_transitionalt',
'width' => 220
));
new FieldImage($settings, 'image2', n2_('Back image'), '', array(
'relatedAlt' => 'item_transitionalt2',
'width' => 220
));
new Select($settings, 'animation', n2_('Animation'), '', array(
'options' => array(
'Fade' => n2_('Fade'),
'VerticalFlip' => n2_('Vertical flip'),
'HorizontalFlip' => n2_('Horizontal flip')
)
));
$link = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-transition-link', n2_('Link'));
new Url($link, 'href', n2_('Link'), '', array(
'relatedFields' => array(
'item_transitionhref-target',
'item_transitionhref-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>')
));
$seo = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-transition-seo', n2_('SEO'));
new Text($seo, 'alt', n2_('Front image alt tag'), '', array(
'style' => 'width:133px;'
));
new Text($seo, 'alt2', n2_('Back image alt tag'), '', array(
'style' => 'width:133px;'
));
$optimize = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-transition-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/1839-caption-layer#optimize'
));
}
} Renderable/Item/Transition/ItemTransitionFrontend.php 0000644 00000004523 15235523313 0017027 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\Transition;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Renderable\AbstractRenderableOwner;
use Nextend\SmartSlider3\Renderable\Item\AbstractItemFrontend;
class ItemTransitionFrontend extends AbstractItemFrontend {
public function render() {
return $this->getHtml();
}
public function renderAdminTemplate() {
return $this->getHtml();
}
private function getHtml() {
$image = $this->data->get('image', '');
$image2 = $this->data->get('image2', '');
if (empty($image) && empty($image2)) {
return '';
}
$owner = $this->layer->getOwner();
$image = $owner->fill($image);
$image2 = $owner->fill($image2);
if (empty($image) && empty($image2)) {
return '';
}
$this->loadResources($owner);
$owner->addScript('new _N2.FrontendItemTransition(this, "' . $this->id . '", "' . $this->data->get('animation', 'Fade') . '");');
$html = Html::openTag("div", array(
"class" => "n2-ss-item-transition-inner"
));
$imageAttributes = array(
'alt' => htmlspecialchars($owner->fill($this->data->get('alt', ''))),
'class' => 'n2-ss-item-transition-image1'
);
$html .= $owner->renderImage($this, $image, $imageAttributes);
$imageAttributes2 = array(
'alt' => htmlspecialchars($owner->fill($this->data->get('alt2', ''))),
'class' => 'n2-ss-item-transition-image2'
);
$html .= $owner->renderImage($this, $image2, $imageAttributes2);
$html .= Html::closeTag('div');
$linkAttributes = array();
if ($this->isEditor) {
$linkAttributes['onclick'] = 'return false;';
}
return Html::tag("div", array(
"id" => $this->id,
"class" => "n2-ss-item-transition n2-ss-item-content n2-ow-all"
), $this->getLink($html, $linkAttributes));
}
/**
* @param $owner AbstractRenderableOwner
*/
public function loadResources($owner) {
$owner->addLess(self::getAssetsPath() . "/transition.n2less", array(
"sliderid" => $owner->getElementID()
));
}
} Renderable/Item/ProgressBar/ItemProgressBar.php 0000644 00000014456 15235523313 0015533 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\ProgressBar;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\Font;
use Nextend\Framework\Form\Element\Hidden\HiddenFont;
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\Number;
use Nextend\Framework\Form\Fieldset;
use Nextend\SmartSlider3\Renderable\Item\AbstractItem;
class ItemProgressBar extends AbstractItem {
protected $ordering = 10;
protected $layerProperties = array(
"desktopportraitwidth" => 300
);
protected $fonts = array(
'font' => array(
'defaultName' => 'item-progressbar-font',
'value' => '{"data":[{"extra":"","color":"ffffffff","size":"14||px","tshadow":"0|*|0|*|0|*|000000ff","lineheight":"1.5","bold":0,"italic":0,"underline":0,"align":"right","letterspacing":"normal","wordspacing":"normal","texttransform":"none"}]}'
),
'fontlabel' => array(
'defaultName' => 'item-progressbar-fontlabel',
'value' => '{"data":[{"extra":"","color":"ffffffff","size":"14||px","tshadow":"0|*|0|*|0|*|000000ff","lineheight":"1.5","bold":0,"italic":0,"underline":0,"align":"left","letterspacing":"normal","wordspacing":"normal","texttransform":"none"}]}'
)
);
protected function isBuiltIn() {
return true;
}
public function getType() {
return 'progressbar';
}
public function getTitle() {
return n2_('Progress bar');
}
public function getIcon() {
return 'ssi_32 ssi_32--progressbar';
}
public function getGroup() {
return n2_x('Special', 'Layer group');
}
public function createFrontend($id, $itemData, $layer) {
return new ItemProgressBarFrontend($this, $id, $itemData, $layer);
}
public function loadResources($renderable) {
parent::loadResources($renderable);
$renderable->addLess(self::getAssetsPath() . "/progressbar.n2less", array(
"sliderid" => $renderable->elementId
));
}
public function getValues() {
return parent::getValues() + array(
'value' => 50,
'startvalue' => 0,
'total' => 100,
'color' => '00000080',
'color2' => '64c133ff',
'pre' => '',
'post' => '%',
'label' => n2_('Progress'),
'labelplacement' => 'before',
'animationduration' => 1000,
'animationdelay' => 0
);
}
public function getFilled($slide, $data) {
$data = parent::getFilled($slide, $data);
$data->set('label', $slide->fill($data->get('label', '')));
return $data;
}
public function prepareExport($export, $data) {
parent::prepareExport($export, $data);
$export->addVisual($data->get('font'));
$export->addVisual($data->get('fontlabel'));
}
public function prepareImport($import, $data) {
$data = parent::prepareImport($import, $data);
$data->set('font', $import->fixSection($data->get('font')));
$data->set('fontlabel', $import->fixSection($data->get('fontlabel')));
return $data;
}
public function globalDefaultItemFontAndStyle($container) {
$table = new ContainerTable($container, $this->getType(), $this->getTitle());
$row1 = $table->createRow($this->getType() . '-1');
new Font($row1, 'item-progressbar-font', n2_('Progress bar'), $this->fonts['font']['value'], array(
'mode' => 'simple'
));
new Font($row1, 'item-progressbar-fontlabel', n2_('Label'), $this->fonts['fontlabel']['value'], array(
'mode' => 'simple'
));
}
public function renderFields($container) {
$counter = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-progressbar-counter', n2_('Counter'));
new Number($counter, 'value', n2_('Value'), '', array(
'wide' => 5
));
new Number($counter, 'startvalue', n2_('Start from'), '', array(
'wide' => 5
));
new Number($counter, 'total', n2_('Total'), '', array(
'wide' => 5
));
$display = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-progressbar-display', n2_('Display'));
new Color($display, 'color', n2_('Color'), '', array(
'alpha' => true
));
new Color($display, 'color2', n2_('Active color'), '', array(
'alpha' => true
));
$labels = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-progressbar-labels', n2_('Labels'));
new Text($labels, 'label', n2_('Label'), '', array(
'style' => 'width:150px;'
));
new Select($labels, 'labelplacement', n2_('Placement'), '', array(
'options' => array(
'before' => n2_('Before'),
'over' => n2_('Over'),
'after' => n2_('After')
)
));
new Text($labels, 'pre', n2_('Pre'), '', array(
'style' => 'width:40px;'
));
new Text($labels, 'post', n2_('Post'), '', array(
'style' => 'width:40px;'
));
$animation = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-progressbar-animation', n2_('Animation'));
new Number($animation, 'animationduration', n2_('Animation duration'), 1, array(
'min' => 0,
'wide' => 5,
'unit' => 'ms'
));
new Number($animation, 'animationdelay', n2_('Delay'), 0, array(
'min' => 0,
'wide' => 5,
'unit' => 'ms'
));
new HiddenFont($counter, 'font', n2_('Font') . ' - ' . n2_('Counter'), '', array(
'mode' => 'simple'
));
new HiddenFont($counter, 'fontlabel', n2_('Font') . ' - ' . n2_('Label'), '', array(
'mode' => 'simple'
));
}
} Renderable/Item/ProgressBar/ItemProgressBarFrontend.php 0000644 00000010634 15235523313 0017225 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\ProgressBar;
use Nextend\Framework\Parser\Color;
use Nextend\Framework\Sanitize;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Renderable\AbstractRenderableOwner;
use Nextend\SmartSlider3\Renderable\Item\AbstractItemFrontend;
class ItemProgressBarFrontend extends AbstractItemFrontend {
public function render() {
return $this->getHtml();
}
public function renderAdminTemplate() {
return $this->getHtml();
}
private function getHtml() {
$owner = $this->layer->getOwner();
$this->loadResources($owner);
$value = intval($this->data->get('value'));
$min = min(0, $value);
$startvalue = max(intval($this->data->get('startvalue')), $min);
$total = max(max(intval($this->data->get('total')), $startvalue), $value);
$duration = max(0, intval($this->data->get('animationduration')));
if ($total != $min) {
$toPercent = (min($value, $total) - $min) / ($total - $min);
if ($duration == 0) {
// We do not have animation
$fromPercent = $toPercent;
} else {
$fromPercent = (min($startvalue, $total) - $min) / ($total - $min);
}
} else {
$duration = 0;
$fromPercent = $toPercent = 0;
}
$labelHTML = '';
$label = Sanitize::filter_allowed_html($owner->fill($this->data->get('label')));
$placement = '';
if (!empty($label)) {
$fontLabel = $owner->addFont($this->data->get('fontlabel'), 'simple');
$labelHTML = Html::tag('div', array(
'class' => 'n2-ss-item-progressbar-label n2-ow ' . $fontLabel
), $label);
$placement = $this->data->get('labelplacement');
}
$html = '';
if ($placement == 'before') {
$html .= $labelHTML;
}
$html .= Html::openTag('div', array(
'id' => $this->id,
'class' => 'n2-ow n2-ss-item-progressbar',
'style' => 'background-color: ' . Color::colorToRGBA($this->data->get('color')) . ';'
));
$html .= Html::openTag('div', array(
'class' => 'n2-ow n2-ss-item-progressbar-inner',
'style' => 'width:' . $fromPercent * 100 . '%;background-color: ' . Color::colorToRGBA($this->data->get('color2')) . ';'
));
if ($placement == 'over') {
$html .= $labelHTML;
}
$font = $owner->addFont($this->data->get('font'), 'simple');
$pre = Sanitize::filter_allowed_html($this->data->get('pre'));
$post = Sanitize::filter_allowed_html($this->data->get('post'));
$html .= Html::tag('div', array(
'class' => 'n2-ss-item-progressbar-counting n2-ow ' . $font
), $pre . round($min + $fromPercent * ($total - $min)) . $post);
$html .= '</div>';
$html .= '</div>';
if ($placement == 'after') {
$html .= $labelHTML;
}
$jsData = array(
'name' => 'progressbar',
'pre' => $pre,
'post' => $post,
'fromPercent' => $fromPercent,
'toPercent' => $toPercent,
'duration' => $duration,
'delay' => $this->data->get('animationdelay'),
'min' => $min,
'total' => $total,
'counting' => '.n2-ss-item-progressbar-counting',
'display' => '.n2-ss-item-progressbar-inner',
'displayMode' => 'width'
);
if ($this->isEditor && $owner->underEdit) {
$owner->addScript('new _N2.CounterItemAdmin(this, "' . $this->id . '", ' . json_encode($jsData) . ');');
} else {
$owner->addScript('new _N2.FrontendItemCounter(this, "' . $this->id . '", ' . json_encode($jsData) . ');');
}
return Html::tag('div', array(
'class' => 'n2-ss-item-content n2-ow'
), $html);
}
/**
* @param $owner AbstractRenderableOwner
*/
public function loadResources($owner) {
$owner->addLess(self::getAssetsPath() . "/progressbar.n2less", array(
"sliderid" => $owner->getElementID()
));
}
} Renderable/Item/Input/ItemInput.php 0000644 00000020771 15235523313 0013244 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\Input;
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\Message\Warning;
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\Textarea;
use Nextend\Framework\Form\Fieldset;
use Nextend\SmartSlider3\Renderable\Item\AbstractItem;
class ItemInput extends AbstractItem {
protected $ordering = 100;
protected $fonts = array(
'inputfont' => array(
'defaultName' => 'item-input-font',
'value' => '{"data":[{"color":"000000ff","size":"15||px","tshadow":"0|*|0|*|0|*|000000ff","afont":"Montserrat,Arial","lineheight":"44px","bold":0,"italic":0,"underline":0,"align":"left","letterspacing":"normal","wordspacing":"normal","texttransform":"none","extra":"height:44px;"},{},{}]}'
),
'buttonfont' => array(
'defaultName' => 'item-input-button-font',
'value' => '{"data":[{"color":"ffffffff","size":"14||px","tshadow":"0|*|0|*|0|*|000000ff","afont":"Montserrat,Arial","lineheight":"44px","bold":0,"italic":0,"underline":0,"align":"left","letterspacing":"normal","wordspacing":"normal","texttransform":"none","extra":""},{},{}]}'
)
);
protected $styles = array(
'style' => array(
'defaultName' => 'item-input-container-style',
'value' => ''
),
'inputstyle' => array(
'defaultName' => 'item-input-style',
'value' => '{"data":[{"backgroundcolor":"ffffffff","padding":"0|*|20|*|0|*|20|*|px","boxshadow":"0|*|0|*|0|*|0|*|000000ff","border":"0|*|solid|*|000000ff","borderradius":"0","extra":""},{}]}'
),
'buttonstyle' => array(
'defaultName' => 'item-input-button-style',
'value' => '{"data":[{"backgroundcolor":"04bc8fff","padding":"0|*|35|*|0|*|35|*|px","boxshadow":"0|*|0|*|0|*|0|*|000000ff","border":"0|*|solid|*|000000ff","borderradius":"0","extra":""},{}]}'
)
);
protected function isBuiltIn() {
return true;
}
public function getType() {
return 'input';
}
public function getTitle() {
return n2_('Input');
}
public function getIcon() {
return 'ssi_32 ssi_32--input';
}
public function getGroup() {
return n2_x('Advanced', 'Layer group');
}
public function createFrontend($id, $itemData, $layer) {
return new ItemInputFrontend($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-input-container-style', n2_('Container'), $this->styles['style']['value'], array(
'mode' => 'heading'
));
new Font($row1, 'item-input-font', n2_('Input'), $this->fonts['inputfont']['value'], array(
'mode' => 'input'
));
new Style($row1, 'item-input-style', n2_('Input'), $this->styles['inputstyle']['value'], array(
'mode' => 'heading'
));
new Font($row1, 'item-input-button-font', n2_('Button'), $this->fonts['buttonfont']['value'], array(
'mode' => 'hover'
));
new Style($row1, 'item-input-button-style', n2_('Button'), $this->styles['buttonstyle']['value'], array(
'mode' => 'button'
));
}
public function getValues() {
return parent::getValues() + array(
'placeholder' => n2_('What are you looking for?'),
'action' => 'https://www.google.com/search',
'method' => 'GET',
'target' => '_self',
'parameters' => 'ie=utf-8&oe=utf-8',
'name' => 'q',
'buttonlabel' => n2_('Search'),
'submit' => '',
'class' => '',
'onsubmit' => '',
'onkeyup' => ''
);
}
public function getFilled($slide, $data) {
$data = parent::getFilled($slide, $data);
$data->set('parameters', $slide->fill($data->get('parameters')));
$data->set('buttonlabel', $slide->fill($data->get('buttonlabel')));
$data->set('action', $slide->fill($data->get('action')));
$data->set('name', $slide->fill($data->get('name')));
$data->set('placeholder', $slide->fill($data->get('placeholder')));
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) {
$text = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-input', n2_('Text'));
new Warning($text, 'item-input-notice', n2_('We only suggest using this layer if you are a developer, since the Input layer requires deep understanding how HTML form works.'));
new Text($text, 'placeholder', n2_('Placeholder text'), n2_('What are you looking for?'), array(
'style' => 'width:170px;'
));
new Text($text, 'buttonlabel', n2_('Label'), n2_('Button'), array(
'style' => 'width:96px;'
));
$developer = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-input-developer', n2_('Form'));
new Text($developer, 'name', n2_('Input name'), 'q', array(
'style' => 'width:80px;'
));
new Select($developer, 'method', n2_('Method'), 'GET', array(
'options' => array(
'GET' => 'GET',
'POST' => 'POST'
)
));
new LinkTarget($developer, 'target', n2_('Target window'));
new Text($developer, 'action', n2_('Form action'), 'https://www.google.com/search', array(
'style' => 'width:302px;'
));
new Textarea($developer, 'parameters', n2_('Parameters'), 'ie=utf-8&oe=utf-8', array(
'width' => 314
));
new Select($developer, 'submit', n2_('Slide action to submit'), '', array(
'options' => array(
'' => n2_('Off'),
'click' => n2_('Click'),
'mouseenter' => n2_('Mouse enter'),
'mouseleave' => n2_('Mouse leave')
)
));
$js = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-input-js', n2_('JavaScript'));
new Text($js, 'onsubmit', 'OnSubmit', '', array(
'style' => 'width:133px;'
));
new Text($js, 'onkeyup', 'OnKeyUp', '', array(
'style' => 'width:133px;'
));
$html = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-input-html', n2_('Advanced'));
new Text($html, 'class', n2_('CSS Class'), '', array(
'style' => 'width:302px;',
'tipLabel' => n2_('CSS Class'),
'tipDescription' => sprintf(n2_('Class on the %s element.'), '<form>'),
'tipLink' => 'https://smartslider.helpscoutdocs.com/article/1812-layer-style#advanced'
));
new HiddenFont($text, 'inputfont', n2_('Input'), '', array(
'mode' => 'paragraph'
));
new HiddenStyle($text, 'inputstyle', n2_('Input'), '', array(
'mode' => 'heading'
));
new HiddenStyle($text, 'style', n2_('Container'), '', array(
'mode' => 'heading'
));
new HiddenFont($text, 'buttonfont', n2_('Button'), '', array(
'mode' => 'hover'
));
new HiddenStyle($text, 'buttonstyle', n2_('Button'), '', array(
'mode' => 'heading'
));
}
} Renderable/Item/Input/ItemInputFrontend.php 0000644 00000010520 15235523313 0014733 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\Input;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Renderable\Item\AbstractItemFrontend;
class ItemInputFrontend extends AbstractItemFrontend {
public function render() {
$owner = $this->layer->getOwner();
$style = $owner->addStyle($this->data->get('style'), 'heading');
$inputFont = $owner->addFont($this->data->get('inputfont'), 'paragraph');
$inputStyle = $owner->addStyle($this->data->get('inputstyle'), 'heading');
$slideSubmitAction = $this->data->get('submit');
if (!empty($slideSubmitAction)) {
$owner->addScript('(function(){var form=document.getElementById("' . $this->id . '");form.closest(".n2-ss-slide").addEventListener("' . $this->data->get('submit') . '",function(){form.submit()})})();');
}
$parameters = explode('&', $owner->fill($this->data->get('parameters')));
$parametersHTML = '';
foreach ($parameters as $parameter) {
$parameter = explode('=', $parameter);
if (count($parameter) == 2) {
$parametersHTML .= Html::tag('input', array(
'type' => 'hidden',
'name' => $parameter[0],
'value' => $parameter[1],
'class' => 'n2-ow'
), false, false);
}
}
$button = '';
$buttonLabel = strip_tags($owner->fill($this->data->get('buttonlabel')));
if (!empty($buttonLabel)) {
$buttonFont = $owner->addFont($this->data->get('buttonfont'), 'hover');
$buttonStyle = $owner->addStyle($this->data->get('buttonstyle'), 'heading');
$button = Html::tag('input', array(
'encode' => false,
'style' => 'white-space:nowrap;',
'type' => 'submit',
'value' => $buttonLabel,
'class' => 'n2-form-button ' . $buttonFont . ' ' . $buttonStyle . ' n2-ow'
), false, false);
}
return Html::tag('form', array(
'class' => 'n2-ss-item-input-form ' . $style . ' n2-ss-item-content n2-ow ' . $owner->fill($this->data->get('class', '')),
'id' => $this->id,
'action' => $owner->fill($this->data->get('action')),
'method' => $this->data->get('method'),
'target' => $this->data->get('target'),
'onsubmit' => $this->data->get('onsubmit')
), Html::tag('input', array(
'encode' => false,
'name' => $owner->fill($this->data->get('name', '')),
'type' => 'text',
'placeholder' => strip_tags($owner->fill($this->data->get('placeholder', ''))),
'class' => 'n2-input n2-ow ' . $inputFont . $inputStyle,
'style' => 'display: block; width: 100%;white-space:nowrap;',
'onkeyup' => $this->data->get('onkeyup')
), false, false) . $parametersHTML . $button);
}
public function renderAdminTemplate() {
$owner = $this->layer->getOwner();
$style = $owner->addStyle($this->data->get('style'), 'heading');
$inputFont = $owner->addFont($this->data->get('inputfont'), 'paragraph');
$inputStyle = $owner->addStyle($this->data->get('inputstyle'), 'heading');
$button = '';
$buttonLabel = strip_tags($owner->fill($this->data->get('buttonlabel')));
if (!empty($buttonLabel)) {
$buttonFont = $owner->addFont($this->data->get('buttonfont'), 'hover');
$buttonStyle = $owner->addStyle($this->data->get('buttonstyle'), 'heading');
$button = Html::tag('div', array(
'style' => 'white-space:nowrap;',
'class' => 'n2-form-button ' . $buttonFont . ' ' . $buttonStyle . ' n2-ow'
), $buttonLabel);
}
return Html::tag('div', array(
'class' => 'n2-ss-item-input-form ' . $style . ' ' . $this->data->get('class', '') . ' n2-ow'
), "<div class='n2-input n2-ow " . $inputFont . " " . $inputStyle . "' style='white-space:nowrap;'>" . strip_tags($owner->fill($this->data->get('placeholder', ''))) . "</div>" . $button);
}
} Renderable/Item/ImageBox/ItemImageBox.php 0000644 00000033444 15235523313 0014235 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\ImageBox;
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\IconTab;
use Nextend\Framework\Form\Element\MarginPadding;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\RichTextarea;
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\Color;
use Nextend\Framework\Form\Element\Text\FieldImage;
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;
use Nextend\Framework\Parser\Common;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\SmartSlider3\Form\Element\Radio\InnerAlign;
use Nextend\SmartSlider3\Renderable\Item\AbstractItem;
class ItemImageBox extends AbstractItem {
protected $ordering = 1;
protected $layerProperties = array("desktopportraitwidth" => "300");
protected $fonts = array(
'fonttitle' => array(
'defaultName' => 'item-imagebox-fonttitle',
'value' => '{"data":[{"extra":"","color":"ffffffff","size":"32||px","tshadow":"0|*|0|*|0|*|000000ff","lineheight":"1.5","bold":0,"italic":0,"underline":0,"align":"inherit","letterspacing":"normal","wordspacing":"normal","texttransform":"none"},{"extra":""}]}'
),
'fontdescription' => array(
'defaultName' => 'item-imagebox-fontdescription',
'value' => '{"data":[{"extra":"","color":"ffffffff","size":"16||px","tshadow":"0|*|0|*|0|*|000000ff","lineheight":"2","bold":0,"italic":0,"underline":0,"align":"inherit","letterspacing":"normal","wordspacing":"normal","texttransform":"none"},{"extra":""},{"extra":""}]}'
)
);
protected $styles = array(
'style' => array(
'defaultName' => 'item-imagebox-style',
'value' => ''
)
);
protected function isBuiltIn() {
return true;
}
public function getType() {
return 'imagebox';
}
public function getTitle() {
return n2_('Image box');
}
public function getIcon() {
return 'ssi_32 ssi_32--imagebox';
}
public function getGroup() {
return n2_x('Special', 'Layer group');
}
public function createFrontend($id, $itemData, $layer) {
return new ItemImageBoxFrontend($this, $id, $itemData, $layer);
}
public function loadResources($renderable) {
parent::loadResources($renderable);
$renderable->addLess(self::getAssetsPath() . "/imagebox.n2less", array(
"sliderid" => $renderable->elementId
));
}
public function getValues() {
return parent::getValues() + array(
'layout' => 'top',
'padding' => '10|*|10|*|10|*|10',
'inneralign' => 'center',
'verticalalign' => 'flex-start',
'image' => '$ss3-frontend$/images/placeholder/image.png',
'imagewidth' => 100,
'alt' => '',
'icon' => '',
'iconsize' => 64,
'iconcolor' => 'ffffffff',
'heading' => n2_('Heading'),
'headingpriority' => 'div',
'description' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',
'href' => '#',
'href-target' => '_self',
'href-rel' => '',
'href-aria-label' => '',
'fullwidth' => 0,
'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('heading', $slide->fill($data->get('heading', '')));
$data->set('description', $slide->fill($data->get('description', '')));
$data->set('href', $slide->fill($data->get('href', '#|*|')));
$data->set('image', $slide->fill($data->get('image', '')));
$data->set('alt', $slide->fill($data->get('alt', '')));
return $data;
}
public function prepareExport($export, $data) {
parent::prepareExport($export, $data);
$export->addImage($data->get('image'));
$export->addVisual($data->get('fonttitle'));
$export->addVisual($data->get('fontdescription'));
$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('fonttitle', $import->fixSection($data->get('fonttitle')));
$data->set('fontdescription', $import->fixSection($data->get('fontdescription')));
$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 globalDefaultItemFontAndStyle($container) {
$table = new ContainerTable($container, $this->getType(), $this->getTitle());
$row1 = $table->createRow($this->getType() . '-1');
new Font($row1, 'item-imagebox-fonttitle', n2_('Title'), $this->fonts['fonttitle']['value'], array(
'mode' => 'hover'
));
new Font($row1, 'item-imagebox-fontdescription', n2_('Description'), $this->fonts['fontdescription']['value'], array(
'mode' => 'paragraph'
));
new Style($row1, 'item-imagebox-style', n2_('Image box'), $this->styles['style']['value'], array(
'mode' => 'heading'
));
}
public function renderFields($container) {
$imageSettings = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'image-settings', n2_('General'));
new IconTab($imageSettings, 'imagetype', n2_('Type'), 'image', array(
'options' => array(
'image' => 'ssi_16 ssi_16--image',
'icon' => 'ssi_16 ssi_16--star'
),
'relatedValueFields' => array(
array(
'values' => array(
'image'
),
'field' => array(
'item_imageboximage',
'item_imageboximagewidth',
'item_imageboxalt'
)
),
array(
'values' => array(
'icon'
),
'field' => array(
'item_imageboxicon',
'item_imageboxiconsize',
'item_imageboxiconcolor',
'item_imageboxhref-aria-label'
)
)
),
'tooltips' => array(
'image' => n2_('Image'),
'icon' => n2_('Icon'),
)
));
new FieldImage($imageSettings, 'image', n2_('Image'), '', array(
'relatedAlt' => 'item_imageboxalt',
'width' => 140
));
new NumberSlider($imageSettings, 'imagewidth', n2_('Width'), '', array(
'max' => 100,
'unit' => '%',
'wide' => 3
));
new Text($imageSettings, 'alt', 'SEO - ' . n2_('Alt tag'), '', array(
'style' => 'width:218px;'
));
new Icon($imageSettings, 'icon', n2_('Icon'), '', array(
'hasClear' => true
));
new NumberSlider($imageSettings, 'iconsize', n2_('Size'), 100, array(
'min' => 8,
'max' => 400,
'sliderMax' => 200,
'step' => 4,
'wide' => 3,
'unit' => 'px'
));
new Color($imageSettings, 'iconcolor', n2_('Color'), '', array(
'alpha' => true
));
new OnOff($imageSettings, 'fullwidth', n2_('Full width'), 1);
$text = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'text-settings', n2_('Text'));
new Text($text, 'heading', n2_('Heading'), n2_('Heading'), array(
'style' => 'width:226px;'
));
new Select($text, 'headingpriority', n2_('Tag'), 'div', array(
'options' => array(
'div' => 'div',
'1' => 'H1',
'2' => 'H2',
'3' => 'H3',
'4' => 'H4',
'5' => 'H5',
'6' => 'H6'
)
));
new HiddenFont($text, 'fonttitle', n2_('Heading'), '', array(
'mode' => 'hover'
));
new RichTextarea($text, 'description', n2_('Description'), '', array(
'fieldStyle' => 'height: 120px; width: 314px;resize: vertical;'
));
new HiddenFont($text, 'fontdescription', n2_('Description'), '', array(
'mode' => 'paragraph'
));
new HiddenStyle($text, 'style', false, '', array(
'mode' => 'box'
));
$link = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-imagebox-link', n2_('Link'));
new Url($link, 'href', n2_('Link'), '', array(
'relatedFields' => array(
'item_imageboxhref-target',
'item_imageboxhref-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>')
));
new Text($link, 'href-aria-label', n2_('Aria label'), '', array(
'tipLabel' => n2_('Aria label'),
'tipDescription' => sprintf(n2_('Enter an %1$s aria-label attribute %2$s that describes the link.'), '<a href="https://www.w3.org/TR/WCAG20-TECHS/ARIA14.html" target="_blank">', '</a>')
));
$settings = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-imagebox', n2_('Display'));
new Select($settings, 'layout', n2_('Layout'), '', array(
'options' => array(
'top' => n2_('Top'),
'left' => n2_('Left'),
'right' => n2_('Right'),
'bottom' => n2_('Bottom')
),
'relatedValueFields' => array(
array(
'values' => array(
'left',
'right'
),
'field' => array(
'item_imageboxverticalalign'
)
)
)
));
$padding = new MarginPadding($settings, 'padding', n2_('Padding'), '10|*|10|*|10|*|10', array(
'unit' => 'px'
));
for ($i = 1; $i < 5; $i++) {
new NumberAutoComplete($padding, 'padding-' . $i, false, '', array(
'values' => array(
0,
5,
10,
20,
30
),
'wide' => 3
));
}
new InnerAlign($settings, 'inneralign', n2_('Inner align'));
new Select($settings, 'verticalalign', n2_('Vertical align'), '', array(
'options' => array(
'flex-start' => n2_('Top'),
'center' => n2_('Center'),
'flex-end' => n2_('Bottom')
),
'tipLabel' => n2_('Vertical align'),
'tipDescription' => n2_('Positions the text inside the layer. Only works with left and right layout.')
));
$optimize = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-caption-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/1839-caption-layer#optimize'
));
}
} Renderable/Item/ImageBox/ItemImageBoxFrontend.php 0000644 00000011230 15235523313 0015722 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\ImageBox;
use Nextend\Framework\Icon\Icon;
use Nextend\Framework\Parser\Color;
use Nextend\Framework\Sanitize;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Renderable\AbstractRenderableOwner;
use Nextend\SmartSlider3\Renderable\Component\AbstractComponent;
use Nextend\SmartSlider3\Renderable\Item\AbstractItemFrontend;
class ItemImageBoxFrontend extends AbstractItemFrontend {
public function isAuto() {
return !$this->data->get('fullwidth', 1);
}
public function render() {
return $this->getHtml();
}
public function renderAdminTemplate() {
return $this->getHtml();
}
private function getHtml() {
$owner = $this->layer->getOwner();
$this->loadResources($owner);
$style = $owner->addStyle($this->data->get('style'), 'heading');
$layout = $this->data->get('layout');
$attr = array(
'class' => 'n2-ss-item-imagebox-container n2-ss-item-content n2-ow-all ' . $style,
'data-layout' => $layout,
'style' => AbstractComponent::innerAlignToStyle($this->data->get('inneralign'))
);
if ($layout == 'left' || $layout == 'right') {
$attr['style'] .= 'align-items:' . $this->data->get('verticalalign') . ';';
}
$html = Html::openTag('div', $attr);
// START IMAGE SECTION
$imageHTML = '';
$imageContainerStyle = '';
$imageInnerStyle = '';
$icon = $this->data->get('icon');
$image = $this->data->get('image');
$imageType = $this->data->get('imagetype', 'icon');
$linkAttributes = array();
if (!empty($icon) && $imageType == 'icon') {
$iconData = Icon::render($icon);
$imageHTML .= Html::tag('i', array(
'class' => 'n2i ' . $iconData['class'],
'style' => 'color: ' . Color::colorToRGBA($this->data->get('iconcolor')) . ';font-size:' . ($this->data->get('iconsize') / 16 * 100) . '%'
), $iconData['ligature']);
$ariaLabel = $this->data->get('href-aria-label', '');
if (!empty($ariaLabel)) {
$linkAttributes['aria-label'] = $ariaLabel;
}
} else if (!empty($image)) {
if ($layout == 'top' || $layout == 'bottom') {
$imageInnerStyle .= 'max-width:' . $this->data->get('imagewidth') . '%;';
} else {
$imageContainerStyle .= 'max-width:' . $this->data->get('imagewidth') . '%;';
}
$image = $owner->fill($this->data->get('image'));
$imageAttributes = array(
'alt' => $owner->fill($this->data->get('alt')),
'style' => $imageInnerStyle,
'class' => ''
);
$imageHTML = $owner->renderImage($this, $image, $imageAttributes);
}
if (!empty($imageHTML)) {
$html .= Html::tag('div', array(
'class' => 'n2-ss-item-imagebox-image',
'style' => $imageContainerStyle
), $this->getLink($imageHTML, $linkAttributes));
}
// END IMAGE SECTION
// START CONTENT SECTION
$html .= Html::openTag('div', array(
'class' => 'n2-ss-item-imagebox-content',
'style' => 'padding:' . implode('px ', explode('|*|', $this->data->get('padding'))) . 'px'
));
$heading = Sanitize::filter_allowed_html($this->data->get('heading'));
if (!empty($heading)) {
$font = $owner->addFont($this->data->get('fonttitle'), 'hover');
$priority = $this->data->get('headingpriority');
$html .= $this->getLink(Html::tag($priority > 0 ? 'h' . $priority : $priority, array('class' => $font), $owner->fill($heading)));
}
$description = Sanitize::filter_allowed_html($this->data->get('description'));
if (!empty($description)) {
$font = $owner->addFont($this->data->get('fontdescription'), 'paragraph');
$html .= Html::tag('div', array('class' => $font), $owner->fill($description));
}
$html .= '</div>';
// END CONTENT SECTION
$html .= '</div>';
return $html;
}
/**
* @param AbstractRenderableOwner $owner
*/
public function loadResources($owner) {
$owner->addLess(self::getAssetsPath() . "/imagebox.n2less", array(
"sliderid" => $owner->getElementID()
));
}
} Renderable/Item/ImageArea/ItemImageArea.php 0000644 00000012675 15235523313 0014500 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\ImageArea;
use Nextend\Framework\Form\Element\LayerWindowFocus;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Select\LinkTarget;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Element\Text\FieldImage;
use Nextend\Framework\Form\Element\Text\HiddenText;
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 ItemImageArea extends AbstractItem {
protected $ordering = 6;
protected $layerProperties = array(
"desktopportraitwidth" => 150,
"desktopportraitheight" => 150
);
protected function isBuiltIn() {
return true;
}
public function getType() {
return 'imagearea';
}
public function getTitle() {
return n2_('Image area');
}
public function getIcon() {
return 'ssi_32 ssi_32--imagearea';
}
public function getGroup() {
return n2_x('Advanced', 'Layer group');
}
public function createFrontend($id, $itemData, $layer) {
return new ItemImageAreaFrontend($this, $id, $itemData, $layer);
}
public function getValues() {
return parent::getValues() + array(
'image' => '$ss3-frontend$/images/placeholder/image.png',
'alt' => '',
'href' => '#',
'href-target' => '_self',
'href-rel' => '',
'fillmode' => 'cover',
'positionx' => 50,
'positiony' => 50
);
}
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('href', $slide->fill($data->get('href', '#|*|')));
$data->set('alt', $slide->fill($data->get('alt', '')));
return $data;
}
public function prepareExport($export, $data) {
parent::prepareExport($export, $data);
$export->addImage($data->get('image'));
$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('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-imagearea', n2_('General'));
$fieldImage = new FieldImage($settings, 'image', n2_('Image'), '', array(
'relatedAlt' => 'item_imageareaalt',
'width' => 220,
'relatedFields' => array(
'item_imageareaitem-imagearea-focus'
)
));
$fieldFocusX = new HiddenText($settings, 'positionx', 50);
$fieldFocusY = new HiddenText($settings, 'positiony', 50);
$focusField = new LayerWindowFocus($settings, 'item-imagearea-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);
new Select($settings, 'fillmode', n2_('Fill mode'), 'cover', array(
'options' => array(
'cover' => n2_('Fill'),
'contain' => n2_('Fit')
)
));
new Text($settings, 'alt', 'SEO - ' . n2_('Alt tag'), '', array(
'style' => 'width:133px;'
));
$link = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-imagearea-link', n2_('Link'));
new Url($link, 'href', n2_('Link'), '', array(
'relatedFields' => array(
'item_imageareahref-target',
'item_imageareahref-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>')
));
}
} Renderable/Item/ImageArea/ItemImageAreaFrontend.php 0000644 00000003165 15235523313 0016172 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\ImageArea;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\SmartSlider3\Renderable\Item\AbstractItemFrontend;
class ItemImageAreaFrontend extends AbstractItemFrontend {
public function render() {
if ($this->hasLink()) {
return $this->getLink($this->getHtml(false), array(
'style' => 'display: block; width:100%;height:100%;',
'class' => 'n2-ss-item-content n2-ow'
));
}
return $this->getHtml();
}
public function renderAdminTemplate() {
return $this->getHtml();
}
private function getHtml($isContent = true) {
$owner = $this->layer->getOwner();
$image = $this->data->get('image', '');
if (empty($image)) {
return '';
}
$image = $owner->fill($image);
$imageUrl = ResourceTranslator::toUrl($image);
$owner->addImage($imageUrl);
$imageAttributes = array(
"alt" => htmlspecialchars($owner->fill($this->data->get('alt', ''))),
'class' => ($isContent ? 'n2-ss-item-content ' : '') . ' n2-ss-item-image-area',
'style' => 'object-fit:' . $this->data->get('fillmode', 'cover') . ';object-position:' . $this->data->get('positionx', 50) . '% ' . $this->data->get('positiony', 50) . '%;'
);
return $owner->renderImage($this, $image, $imageAttributes, array(
'class' => 'n2-ow-all'
));
}
public function needHeight() {
return true;
}
} Renderable/Item/Iframe/ItemIframe.php 0000644 00000006114 15235523313 0013447 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\Iframe;
use Nextend\Framework\Form\Element\Message\Warning;
use Nextend\Framework\Form\Element\MixedField;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Fieldset;
use Nextend\SmartSlider3\Renderable\Item\AbstractItem;
class ItemIframe extends AbstractItem {
protected $ordering = 100;
protected $layerProperties = array(
"desktopportraitwidth" => 300,
"desktopportraitheight" => 300
);
protected function isBuiltIn() {
return true;
}
public function getType() {
return 'iframe';
}
public function getTitle() {
return n2_('Iframe');
}
public function getIcon() {
return 'ssi_32 ssi_32--iframe';
}
public function getGroup() {
return n2_x('Advanced', 'Layer group');
}
public function createFrontend($id, $itemData, $layer) {
return new ItemIframeFrontend($this, $id, $itemData, $layer);
}
public function getValues() {
return parent::getValues() + array(
'url' => 'https://smartslider3.com/',
'size' => '100%|*|100%',
'scroll' => 'yes'
);
}
public function getFilled($slide, $data) {
$data = parent::getFilled($slide, $data);
$data->set('url', $slide->fill($data->get('url', '')));
return $data;
}
public function renderFields($container) {
$general = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-iframe', n2_('General'));
new Warning($general, '', sprintf(n2_('Please note, that %1$swe do not support%2$s customized coding! The iframe layer often needs code customizations what you have to do yourself, so we only suggest using this layer if you are a developer!'), '<b>', '</b>'));
new Text($general, 'url', n2_('Iframe url'), '', array(
'style' => 'width:302px;'
));
$settings = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-iframe-settings', n2_('Display'));
new Select($settings, 'scroll', n2_('Scroll'), 'auto', array(
'options' => array(
'yes' => n2_('Yes'),
'no' => n2_('No'),
'auto' => n2_('Auto')
),
'tipLabel' => n2_('Scroll'),
'tipDescription' => n2_('You can disable the scroll on the iframe content.')
));
$size = new MixedField($settings, 'size', false, '100%|*|100%');
new Text($size, 'size-1', n2_('Width'), '', array(
'style' => 'width:40px;'
));
new Text($size, 'size-2', n2_('Height'), '', array(
'style' => 'width:40px;'
));
$advanced = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-iframe-advanced', n2_('Advanced'));
new Text($advanced, 'title', n2_('Iframe title'), '', array(
'style' => 'width:302px;'
));
}
} Renderable/Item/Iframe/ItemIframeFrontend.php 0000644 00000003060 15235523313 0015144 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\Iframe;
use Nextend\Framework\Parser\Common;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Renderable\Item\AbstractItemFrontend;
class ItemIframeFrontend extends AbstractItemFrontend {
public function render() {
return $this->getHtml();
}
public function renderAdminTemplate() {
return $this->getHtml();
}
private function getHtml() {
$owner = $this->layer->getOwner();
$size = (array)Common::parse($this->data->get('size', ''));
if (!isset($size[0])) $size[0] = '100%';
if (!isset($size[1])) $size[1] = '100%';
$attributes = array(
"encode" => false,
"frameborder" => 0,
"class" => "n2-ow intrinsic-ignore",
"width" => $size[0],
"height" => $size[1],
"scrolling" => $this->data->get("scroll"),
"sandbox" => 'allow-modals allow-forms allow-popups allow-scripts allow-same-origin'
);
$title = strip_tags($this->data->get('title', ''));
if (!empty($title)) {
$attributes['title'] = $title;
}
$attributes[$owner->isLazyLoadingEnabled() ? 'data-lazysrc' : 'src'] = $owner->fill($this->data->get("url"));
return Html::tag('div', array('class' => 'n2-ss-item-iframe-wrapper n2-ss-item-content n2-ow'), Html::tag("iframe", $attributes, ""));
}
public function needHeight() {
return true;
}
} Renderable/Item/HtmlList/ItemHtmlList.php 0000644 00000014326 15235523313 0014345 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\HtmlList;
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\Select;
use Nextend\Framework\Form\Element\Style;
use Nextend\Framework\Form\Element\Textarea;
use Nextend\Framework\Form\Fieldset;
use Nextend\SmartSlider3\Renderable\Item\AbstractItem;
class ItemHtmlList extends AbstractItem {
protected $ordering = 6;
protected $layerProperties = array(
"desktopportraitleft" => 0,
"desktopportraittop" => 0,
"desktopportraitwidth" => 400,
"desktopportraitalign" => "left",
"desktopportraitvalign" => "top"
);
protected $fonts = array(
'font' => array(
'defaultName' => 'item-list-font',
'value' => '{"data":[{"color":"ffffffff","size":"14||px","align":"left"},{"color":"1890d7ff"},{"extra":""}]}'
)
);
protected $styles = array(
'liststyle' => array(
'defaultName' => 'item-list-liststyle',
'value' => '{"data":[{"extra":"margin-top:0;\nmargin-bottom:0;"}, {"extra":""}]}'
),
'itemstyle' => array(
'defaultName' => 'item-list-itemstyle',
'value' => '{"name":"List","data":[{"padding":"10|*|20|*|10|*|20|*|px","extra":"margin:0;"},{"extra":""}]}'
)
);
protected function isBuiltIn() {
return true;
}
public function getType() {
return 'list';
}
public function getTitle() {
return n2_('List');
}
public function getIcon() {
return 'ssi_32 ssi_32--list';
}
public function getGroup() {
return n2_x('Special', 'Layer group');
}
public function createFrontend($id, $itemData, $layer) {
return new ItemHtmlListFrontend($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-list-font', n2_('List'), $this->fonts['font']['value'], array(
'mode' => 'list'
));
new Style($row1, 'item-list-liststyle', n2_('List'), $this->styles['liststyle']['value'], array(
'mode' => 'heading'
));
new Style($row1, 'item-list-itemstyle', n2_('Item'), $this->styles['itemstyle']['value'], array(
'mode' => 'heading'
));
}
public function getValues() {
return parent::getValues() + array(
'content' => n2_("Item 1\nItem 2\nItem 3"),
'type' => 'disc'
);
}
public function getFilled($slide, $data) {
$data = parent::getFilled($slide, $data);
$data->set('content', $slide->fill($data->get('content', '')));
return $data;
}
public function prepareExport($export, $data) {
parent::prepareExport($export, $data);
$export->addVisual($data->get('font'));
$export->addVisual($data->get('liststyle'));
$export->addVisual($data->get('itemstyle'));
}
public function prepareImport($import, $data) {
$data = parent::prepareImport($import, $data);
$data->set('font', $import->fixSection($data->get('font')));
$data->set('liststyle', $import->fixSection($data->get('liststyle')));
$data->set('itemstyle', $import->fixSection($data->get('itemstyle')));
return $data;
}
public function renderFields($container) {
$settings = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-list', n2_('General'));
new Textarea($settings, 'content', n2_('Items'), '', array(
'width' => 314,
'height' => 120
));
new Select($settings, 'type', n2_('List type'), '', array(
'options' => array(
'none' => n2_x('None', 'List layer type'),
'disc' => n2_x('Disc', 'List layer type'),
'square' => n2_x('Square', 'List layer type'),
'circle' => n2_x('Circle', 'List layer type'),
'decimal' => n2_x('Decimal', 'List layer type'),
'armenian' => n2_x('Armenian', 'List layer type'),
'cjk-ideographic' => n2_x('Cjk-ideographic', 'List layer type'),
'decimal-leading-zero' => n2_x('Decimal-leading-zero', 'List layer type'),
'georgian' => n2_x('Georgian', 'List layer type'),
'hebrew' => n2_x('Hebrew', 'List layer type'),
'hiragana' => n2_x('Hiragana', 'List layer type'),
'hiragana-iroha' => n2_x('Hiragana-iroha', 'List layer type'),
'katakana' => n2_x('Katakana', 'List layer type'),
'katakana-iroha' => n2_x('Katakana-iroha', 'List layer type'),
'lower-alpha' => n2_x('Lower-alpha', 'List layer type'),
'lower-greek' => n2_x('Lower-greek', 'List layer type'),
'lower-latin' => n2_x('Lower-latin', 'List layer type'),
'lower-roman' => n2_x('Lower-roman', 'List layer type'),
'upper-alpha' => n2_x('Upper-alpha', 'List layer type'),
'upper-latin' => n2_x('Upper-latin', 'List layer type'),
'upper-roman' => n2_x('Upper-roman', 'List layer type')
)
));
new HiddenFont($settings, 'font', false, '', array(
'mode' => 'list',
));
new HiddenStyle($settings, 'liststyle', n2_('Style') . ' - ' . n2_('List'), '', array(
'mode' => 'heading'
));
new HiddenStyle($settings, 'itemstyle', n2_('Style') . ' - ' . n2_('Item'), '', array(
'mode' => 'heading'
));
}
} Renderable/Item/HtmlList/ItemHtmlListFrontend.php 0000644 00000002355 15235523313 0016044 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\HtmlList;
use Nextend\Framework\View\Html;
use Nextend\Framework\Sanitize;
use Nextend\SmartSlider3\Renderable\Item\AbstractItemFrontend;
class ItemHtmlListFrontend 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'), 'list');
$listStyle = $owner->addStyle($this->data->get('liststyle'), 'heading');
$itemStyle = $owner->addStyle($this->data->get('itemstyle'), 'heading');
$html = '';
$lis = explode("\n", Sanitize::filter_allowed_html($owner->fill($this->data->get('content', ''))));
foreach ($lis as $li) {
$html .= '<li class="' . $itemStyle . ' n2-ow" style="list-style-type:inherit;">' . $li . '</li>';
}
return Html::tag('ol', array(
'class' => $font . '' . $listStyle . ' n2-ss-item-content n2-ow',
'style' => "list-style-type:" . $this->data->get('type')
), $html);
}
} Renderable/Item/Icon/ItemIcon.php 0000644 00000011513 15235523313 0012620 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\Icon;
use Nextend\Framework\Form\Element\Hidden\HiddenStyle;
use Nextend\Framework\Form\Element\Icon;
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\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 ItemIcon extends AbstractItem {
protected $ordering = 5;
protected function isBuiltIn() {
return true;
}
public function getType() {
return 'icon2';
}
public function getTitle() {
return n2_('Icon');
}
public function getIcon() {
return 'ssi_32 ssi_32--icon';
}
public function createFrontend($id, $itemData, $layer) {
return new ItemIconFrontend($this, $id, $itemData, $layer);
}
public function getValues() {
return parent::getValues() + array(
'icon' => 'fa:smile-o',
'color' => 'ffffffff',
'colorhover' => 'ffffff00',
'size' => 100,
'href' => '#',
'href-target' => '_self',
'href-rel' => '',
'href-aria-label' => '',
'style' => ''
);
}
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('icon', $slide->fill($data->get('icon', '')));
$data->set('href', $slide->fill($data->get('href', '#|*|')));
return $data;
}
public function prepareExport($export, $data) {
parent::prepareExport($export, $data);
$export->addVisual($data->get('style'));
$export->addLightbox($data->get('href'));
}
public function prepareImport($import, $data) {
$data = parent::prepareImport($import, $data);
$data->set('style', $import->fixSection($data->get('style')));
$data->set('href', $import->fixLightbox($data->get('href')));
return $data;
}
public function renderFields($container) {
$settings = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-icon2-icon', n2_('General'));
new Icon($settings, 'icon', n2_('Icon'));
new Color($settings, 'color', n2_('Color'), '00000080', array(
'alpha' => true
));
new Color($settings, 'colorhover', n2_('Hover color'), '00000000', array(
'alpha' => true
));
new NumberSlider($settings, 'size', n2_('Size'), 24, array(
'min' => 4,
'max' => 10000,
'sliderMax' => 200,
'step' => 4,
'wide' => 3,
'unit' => 'px'
));
new HiddenStyle($settings, 'style', false, '', array(
'mode' => 'box'
));
$link = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-icon2-link', n2_('Link'));
new Url($link, 'href', n2_('Link'), '', array(
'style' => 'width:236px;',
'relatedFields' => array(
'item_icon2href-target',
'item_icon2href-rel',
'item_icon2href-aria-label'
),
'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>')
));
new Text($link, 'href-aria-label', n2_('ARIA label'), '', array(
'tipLabel' => n2_('ARIA label'),
'tipDescription' => sprintf(n2_('Enter an %1$s aria-label attribute %2$s that describes the link.'), '<a href="https://www.w3.org/TR/WCAG20-TECHS/ARIA14.html" target="_blank">', '</a>')
));
}
} Renderable/Item/Icon/ItemIconFrontend.php 0000644 00000004031 15235523313 0014315 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\Icon;
use Nextend\Framework\Icon\Icon;
use Nextend\Framework\Parser\Color;
use Nextend\SmartSlider3\Renderable\Item\AbstractItemFrontend;
class ItemIconFrontend extends AbstractItemFrontend {
public function isAuto() {
return true;
}
public function render() {
if ($this->hasLink()) {
$attributes = array(
'style' => 'display:inline-block;',
'class' => 'n2-ss-item-content n2-ow'
);
$ariaLabel = $this->data->get('href-aria-label', '');
if (!empty($ariaLabel)) {
$attributes['aria-label'] = $ariaLabel;
}
return $this->getLink($this->getHtml(false), $attributes);
}
return $this->getHtml();
}
public function renderAdminTemplate() {
return $this->getHtml();
}
private function getHtml($isContent = true) {
$owner = $this->layer->getOwner();
$iconData = Icon::render($this->data->get('icon'));
if (!$iconData) {
return '';
}
$styleClass = $owner->addStyle($this->data->get('style'), 'heading');
$selector = 'div#' . $owner->getElementID() . ' .' . $this->id;
$color = Color::colorToRGBA($this->data->get('color', '00000080'));
$style = $selector . '{color:' . $color . '}';
if (substr($this->data->get('colorhover', '00000000'), 6, 2) != '00') {
$colorHover = Color::colorToRGBA($this->data->get('colorhover', '00000000'));
$style .= $selector . ':HOVER,' . $selector . ':FOCUS,' . $selector . ':VISITED{color:' . $colorHover . '}';
}
$owner->addCSS($style);
return '<span class="n2i ' . $styleClass . ' ' . $this->id . ' ' . $iconData['class'] . ($isContent ? ' n2-ss-item-content' : '') . '" style="font-size:' . ($this->data->get('size') / 16 * 100) . '%;">' . $iconData['ligature'] . '</span>';
}
} Renderable/Item/Html/ItemHtml.php 0000644 00000004765 15235523313 0012663 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\Html;
use Nextend\Framework\Form\Element\Message\Warning;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Radio\TextAlign;
use Nextend\Framework\Form\Element\Textarea;
use Nextend\Framework\Form\Fieldset;
use Nextend\SmartSlider3\Renderable\Item\AbstractItem;
class ItemHtml extends AbstractItem {
protected $ordering = 102;
protected $layerProperties = array("desktopportraitwidth" => 200);
protected function isBuiltIn() {
return true;
}
public function getType() {
return 'html';
}
public function getTitle() {
return n2_('HTML');
}
public function getIcon() {
return 'ssi_32 ssi_32--html';
}
public function getGroup() {
return n2_x('Advanced', 'Layer group');
}
public function createFrontend($id, $itemData, $layer) {
return new ItemHtmlFrontend($this, $id, $itemData, $layer);
}
public function getValues() {
return parent::getValues() + array(
'html' => '<div>' . n2_('Empty element') . '</div>',
'css' => ".selector{\n\n}",
'textalign' => 'inherit'
);
}
public function getFilled($slide, $data) {
$data = parent::getFilled($slide, $data);
$data->set('html', $slide->fill($data->get('html', '')));
return $data;
}
public function renderFields($container) {
$settings = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-html', n2_('General'));
new Warning($settings, 'item-html-notice', sprintf(n2_('Please note that %1$swe do not support%2$s the HTML layer and the 3rd party codes loaded by it. We only suggest using this layer if you are a developer. %3$sAlso, make sure your HTML code is valid! Invalid HTML codes can mess up the entire slide and the only way resolving this problem is deleting the slide.'), '<b>', '</b>', '<br>'));
new Textarea($settings, 'html', 'HTML', '', array(
'height' => 130,
'width' => 314
));
new TextAlign($settings, 'textalign', n2_('Text align'), 'inherit');
if (class_exists('tidy', false)) {
new OnOff($settings, 'tidy', n2_('Repair HTML errors'), 1);
}
new Textarea($settings, 'css', 'CSS', '', array(
'height' => 130,
'width' => 314
));
}
} Renderable/Item/Html/ItemHtmlFrontend.php 0000644 00000004046 15235523313 0014353 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\Html;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Renderable\Item\AbstractItemFrontend;
use tidy;
class ItemHtmlFrontend extends AbstractItemFrontend {
private $scripts = array();
public function render() {
return $this->getHtml();
}
public function renderAdminTemplate() {
return $this->getHtml();
}
private function getHtml() {
$owner = $this->layer->getOwner();
$css = '';
if ($cssCode = $this->data->get('css', '')) {
$css = Html::style($cssCode);
}
return Html::tag("div", array(), $this->closeTags('<div style="text-align:' . $this->data->get("textalign") . ';">' . $owner->fill($this->data->get("html")) . '</div>') . $css);
}
private function closeTags($html) {
$html = Html::tag('div', array(
'class' => 'n2-ss-item-content n2-ow'
), $html);
if (class_exists('tidy', false) && $this->data->get('tidy', 1)) {
$tidy_config = array(
'show-body-only' => true,
'wrap' => 0,
'new-blocklevel-tags' => 'menu,mytag,article,header,footer,section,nav,svg,path,g,a,lottie-player',
'new-inline-tags' => 'video,audio,canvas,ruby,rt,rp',
'doctype' => '<!DOCTYPE HTML>',
'preserve-entities' => true,
'drop-empty-elements' => false,
'drop-empty-paras' => false
);
$tidy = new tidy();
$html = preg_replace_callback('/<script.*?>.*?<\/script>/ism', array(
$this,
'matchScript'
), $html);
return $tidy->repairString($html, $tidy_config, 'UTF8') . implode('', $this->scripts);
}
return $html;
}
public function matchScript($matches) {
$this->scripts[] = $matches[0];
return '';
}
} Renderable/Item/HighlightedHeading/ItemHighlightedHeading.php 0000644 00000030175 15235523313 0020245 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\HighlightedHeading;
use Nextend\Framework\Filesystem\Filesystem;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\Font;
use Nextend\Framework\Form\Element\Grouping;
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\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\Color;
use Nextend\Framework\Form\Element\Text\Number;
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 ItemHighlightedHeading extends AbstractItem {
protected $ordering = 3;
protected $fonts = array(
'font' => array(
'defaultName' => 'item-highlighted-heading-font',
'value' => '{"data":[{"extra":"","color":"ffffffff","size":"36||px","tshadow":"0|*|0|*|0|*|000000ff","lineheight":"1.5","bold":0,"italic":0,"underline":0,"align":"inherit","letterspacing":"normal","wordspacing":"normal","texttransform":"none"},{},{}]}'
)
);
protected $styles = array(
'style' => array(
'defaultName' => 'item-highlighted-heading-style',
'value' => '{"data":[{},{"padding":"0|*|0|*|0|*|0|*|px"},{"padding":"0|*|0|*|0|*|0|*|px"}]}'
)
);
protected function isBuiltIn() {
return true;
}
public function getType() {
return 'highlightedHeading';
}
public function getTitle() {
return n2_('Highlighted heading');
}
public function getIcon() {
return 'ssi_32 ssi_32--highlightheading';
}
public function getGroup() {
return n2_x('Special', 'Layer group');
}
public function createFrontend($id, $itemData, $layer) {
return new ItemHighlightedHeadingFrontend($this, $id, $itemData, $layer);
}
public function getValues() {
return parent::getValues() + array(
'type' => 'circle1',
'color' => '5CBA3CFF',
'width' => 10,
'front' => 0,
'before-text' => n2_('This page is'),
'highlighted-text' => n2_('Amazing'),
'after-text' => '',
'animate' => 1,
'delay' => 0,
'duration' => 1500,
'loop' => 0,
'loop-delay' => 2000,
'href' => '#',
'href-target' => '_self',
'href-rel' => '',
'priority' => 'div',
'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');
$data->set('href', $link);
$data->set('href-target', $target);
$data->set('href-rel', $rel);
}
}
public function loadResources($renderable) {
parent::loadResources($renderable);
$renderable->addLess(self::getAssetsPath() . "/highlightedHeading.n2less", array(
"sliderid" => $renderable->elementId
));
$renderable->addScript('_N2.ItemHighlightedHeading.svg=' . json_encode($this->getTypes()) . ';');
}
private function getTypes() {
static $types = null;
if ($types === null) {
$types = array();
$extension = 'svg';
$folder = self::getAssetsPath() . '/svg/';
$files = Filesystem::files($folder);
for ($i = 0; $i < count($files); $i++) {
$pathInfo = pathinfo($files[$i]);
if (isset($pathInfo['extension']) && $pathInfo['extension'] == $extension) {
$types[$pathInfo['filename']] = file_get_contents($folder . $files[$i]);
}
}
}
return $types;
}
private function getTypeOptions() {
return array(
'' => n2_('None'),
'circle1' => sprintf(n2_('Circle %d'), '1'),
'circle2' => sprintf(n2_('Circle %d'), '2'),
'circle3' => sprintf(n2_('Circle %d'), '3'),
'curly1' => sprintf(n2_('Curly %d'), '1'),
'curly2' => sprintf(n2_('Curly %d'), '2'),
'highlight1' => sprintf(n2_('Highlight %d'), '1'),
'highlight2' => sprintf(n2_('Highlight %d'), '2'),
'highlight3' => sprintf(n2_('Highlight %d'), '3'),
'line_through1' => sprintf(n2_('Line Through %d'), '1'),
'line_through2' => sprintf(n2_('Line Through %d'), '2'),
'line_through3' => sprintf(n2_('Line Through %d'), '3'),
'rectangle1' => sprintf(n2_('Rectangle %d'), '1'),
'rectangle2' => sprintf(n2_('Rectangle %d'), '2'),
'underline1' => sprintf(n2_('Underline %d'), '1'),
'underline2' => sprintf(n2_('Underline %d'), '2'),
'underline3' => sprintf(n2_('Underline %d'), '3'),
'underline_double1' => sprintf(n2_('Underline double %d'), '1'),
'underline_double2' => sprintf(n2_('Underline double %d'), '2'),
'zigzag1' => sprintf(n2_('ZigZag %d'), '1'),
'zigzag2' => sprintf(n2_('ZigZag %d'), '2'),
'zigzag3' => sprintf(n2_('ZigZag %d'), '3'),
);
}
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-highlighted-heading-font', false, $this->fonts['font']['value'], array(
'mode' => 'hover'
));
new Style($row1, 'item-highlighted-heading-style', false, $this->styles['style']['value'], array(
'mode' => 'heading'
));
}
public function renderFields($container) {
$text = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-highlighted-heading-text', n2_('General'));
new Text($text, 'before-text', n2_('Before text'), '', array(
'style' => 'width: 302px;'
));
new Text($text, 'highlighted-text', n2_('Highlighted text'), '', array(
'style' => 'width: 302px;'
));
new Text($text, 'after-text', n2_('After text'), '', array(
'style' => 'width: 302px;'
));
$link = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-highlightheading-link', n2_('Link'));
new Url($link, 'href', n2_('Link'), '', array(
'style' => 'width:236px;',
'relatedFields' => array(
'item_highlightedHeadinghref-target',
'item_highlightedHeadinghref-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>')
));
$settings = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-highlighted-heading', n2_('Highlight'));
new Select($settings, 'type', n2_('Type'), '', array(
'options' => $this->getTypeOptions(),
'relatedFields' => array(
'item_highlightedHeadingcolor',
'item_highlightedHeadingwidth',
'item_highlightedHeadingfront',
'fieldset-layer-window-item-highlightheading-animation'
)
));
new Color($settings, 'color', n2_('Color'), '', array(
'alpha' => true
));
new NumberSlider($settings, 'width', n2_('Width'), '', array(
'max' => 100,
'min' => 1,
'unit' => 'px',
'wide' => 3
));
new OnOff($settings, 'front', n2_('Bring front'), 0, array(
'tipLabel' => n2_('Bring front'),
'tipDescription' => n2_('Puts the shape on top of the text.')
));
$animation = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-highlightheading-animation', n2_('Animation'));
new OnOff($animation, 'animate', n2_('Animate'), 1, array(
'relatedFieldsOn' => array(
'item_highlightedHeadingdelay',
'item_highlightedHeadingduration',
'item_highlightedHeadingloop-group'
)
));
new Number($animation, 'delay', n2_('Delay'), 0, array(
'unit' => 'ms',
'wide' => 5
));
new Number($animation, 'duration', n2_('Duration'), 1500, array(
'unit' => 'ms',
'wide' => 5,
'post' => 'break'
));
$groupingLoop = new Grouping($animation, 'loop-group');
new OnOff($groupingLoop, 'loop', n2_x('Loop', 'Effect'), 1, array(
'relatedFieldsOn' => array(
'item_highlightedHeadingloop-delay'
)
));
new Number($groupingLoop, 'loop-delay', n2_('Loop delay'), 0, array(
'unit' => 'ms',
'wide' => 5
));
$dev = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-highlightheading-dev', n2_('Advanced'));
new Select($dev, 'priority', 'Tag', 'div', array(
'options' => array(
'div' => 'div',
'1' => 'H1',
'2' => 'H2',
'3' => 'H3',
'4' => 'H4',
'5' => 'H5',
'6' => 'H6'
)
));
new HiddenFont($settings, 'font', n2_('Font') . ' - ' . n2_('Heading'), '', array(
'mode' => 'highlight'
));
new HiddenStyle($settings, 'style', n2_('Style') . ' - ' . n2_('Heading'), '', array(
'mode' => 'highlight'
));
new Text($dev, 'class', n2_('CSS Class'), '', array(
'style' => 'width:226px;',
'tipLabel' => n2_('CSS Class'),
'tipDescription' => n2_('Class on the selected tag element.'),
'tipLink' => 'https://smartslider.helpscoutdocs.com/article/1812-layer-style#advanced'
));
}
} Renderable/Item/HighlightedHeading/ItemHighlightedHeadingFrontend.php 0000644 00000012623 15235523313 0021743 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\HighlightedHeading;
use Nextend\Framework\Filesystem\Filesystem;
use Nextend\Framework\Parser\Color;
use Nextend\Framework\Sanitize;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Renderable\AbstractRenderableOwner;
use Nextend\SmartSlider3\Renderable\Item\AbstractItemFrontend;
class ItemHighlightedHeadingFrontend extends AbstractItemFrontend {
public function render() {
return $this->getHtml();
}
public function renderAdminTemplate() {
return $this->getHtml();
}
private function getHtml() {
$owner = $this->layer->getOwner();
$this->loadResources($owner);
$heading = array();
$beforeText = Sanitize::filter_allowed_html($owner->fill($this->data->get('before-text', '')));
if (!empty($beforeText)) {
$heading[] = Html::tag('div', array(
'class' => 'n2-ss-highlighted-heading-before'
), $beforeText);
}
$highlightedText = Sanitize::filter_allowed_html($owner->fill($this->data->get('highlighted-text', '')));
if (!empty($highlightedText)) {
$svg = '';
$highlightType = $this->data->get('type', '');
if (!empty($highlightType)) {
$svgPath = self::getAssetsPath() . '/svg/' . $highlightType . '.svg';
if (Filesystem::fileexists($svgPath)) {
$svg = Filesystem::readFile($svgPath);
$highlightColor = $this->data->get('color', '');
$css = array(
'stroke:#' . substr($highlightColor, 0, 6) . ';',
'stroke-opacity:' . Color::hex2opacity($highlightColor) . ';',
'stroke-width:' . $this->data->get('width', 10) . 'px;'
);
$owner->addCSS('div #' . $owner->getElementID() . ' #' . $this->id . ' svg path{' . implode('', $css) . '}');
}
}
$attributes = array(
'class' => 'n2-highlighted n2-ss-highlighted-heading-highlighted n2-ow',
'data-highlight' => $highlightType
);
if ($this->data->get('animate', 1)) {
$attributes['data-animate'] = 1;
}
$delay = $this->data->get('delay', 0);
if ($delay > 0) {
$attributes['data-delay'] = $delay;
}
$duration = $this->data->get('duration', 1500);
if ($duration != 1500) {
$attributes['data-duration'] = $duration;
}
if ($this->data->get('loop', 0)) {
$attributes['data-loop'] = 1;
}
$loopDelay = $this->data->get('loop-delay', 0);
if ($loopDelay >= 0) {
$attributes['data-loop-delay'] = $loopDelay;
}
if ($this->data->get('front', 0)) {
$attributes['data-front'] = 1;
}
$highlightedInner = Html::tag('div', array(
'class' => 'n2-ss-highlighted-heading-highlighted-text'
), $highlightedText) . $svg;
$href = $this->data->get('href', '');
if (!empty($href) && $href != '#') {
$heading[] = $this->getLink($highlightedInner, $attributes);
} else {
$heading[] = Html::tag('div', $attributes, $highlightedInner);
}
}
$afterText = Sanitize::filter_allowed_html($owner->fill($this->data->get('after-text', '')));
if (!empty($afterText)) {
$heading[] = Html::tag('div', array(
'class' => 'n2-ss-highlighted-heading-after'
), $afterText);
}
$font = $owner->addFont($this->data->get('font'), 'highlight');
$style = $owner->addStyle($this->data->get('style'), 'highlight');
return $this->heading($this->data->get('priority', 'div'), array(
"id" => $this->id,
"class" => 'n2-ss-highlighted-heading-wrapper ' . $font . ' ' . $style . ' n2-ss-item-content n2-ss-text n2-ow'
), implode('', $heading));
}
private function heading($type, $attributes, $content) {
if (is_numeric($type) && $type > 0) {
return Html::tag("h{$type}", $attributes, $content);
}
return Html::tag("div", $attributes, $content);
}
/**
* @param AbstractRenderableOwner $owner
*/
public function loadResources($owner) {
$owner->addLess(self::getAssetsPath() . "/highlightedHeading.n2less", array(
"sliderid" => $owner->getElementID()
));
if (!$owner->isScriptAdded('highlighted-heading')) {
if ($this->isEditor) {
$owner->addScript('this.sliderElement.querySelectorAll(\'.n2-ss-currently-edited-slide .n2-ss-highlighted-heading-highlighted\').forEach((function(el){new _N2.HighlightedHeadingItemAdmin(el, this)}).bind(this));', 'highlighted-heading');
} else {
$owner->addScript('this.sliderElement.querySelectorAll(\'.n2-ss-highlighted-heading-highlighted\').forEach((function(el){new _N2.FrontendItemHighlightedHeading(el, this)}).bind(this));', 'highlighted-heading');
}
}
}
} Renderable/Item/Counter/ItemCounter.php 0000644 00000012557 15235523313 0014107 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\Counter;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\Font;
use Nextend\Framework\Form\Element\Hidden\HiddenFont;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Element\Text\Number;
use Nextend\Framework\Form\Fieldset;
use Nextend\SmartSlider3\Renderable\Item\AbstractItem;
class ItemCounter extends AbstractItem {
protected $ordering = 11;
protected $fonts = array(
'font' => array(
'defaultName' => 'item-counter-font',
'value' => '{"data":[{"extra":"","color":"ffffffff","size":"40||px","tshadow":"0|*|0|*|0|*|000000ff","lineheight":"1","bold":0,"italic":0,"underline":0,"align":"inherit","letterspacing":"normal","wordspacing":"normal","texttransform":"none"}]}'
),
'fontlabel' => array(
'defaultName' => 'item-counter-fontlabel',
'value' => '{"data":[{"extra":"","color":"ffffffff","size":"16||px","tshadow":"0|*|0|*|0|*|000000ff","lineheight":"2","bold":0,"italic":0,"underline":0,"align":"inherit","letterspacing":"normal","wordspacing":"normal","texttransform":"none"}]}'
)
);
protected function isBuiltIn() {
return true;
}
public function getType() {
return 'counter';
}
public function getTitle() {
return n2_('Counter');
}
public function getIcon() {
return 'ssi_32 ssi_32--counter';
}
public function getGroup() {
return n2_x('Special', 'Layer group');
}
public function createFrontend($id, $itemData, $layer) {
return new ItemCounterFrontend($this, $id, $itemData, $layer);
}
public function getValues() {
return parent::getValues() + array(
'value' => 50,
'startvalue' => 0,
'pre' => '',
'post' => '%',
'label' => '',
'labelplacement' => 'after',
'animationduration' => 1000,
'animationdelay' => 0
);
}
public function getFilled($slide, $data) {
$data = parent::getFilled($slide, $data);
$data->set('label', $slide->fill($data->get('label', '')));
$data->set('value', $slide->fill($data->get('value', '')));
$data->set('startvalue', $slide->fill($data->get('startvalue', '')));
return $data;
}
public function prepareExport($export, $data) {
parent::prepareExport($export, $data);
$export->addVisual($data->get('font'));
$export->addVisual($data->get('fontlabel'));
}
public function prepareImport($import, $data) {
$data = parent::prepareImport($import, $data);
$data->set('font', $import->fixSection($data->get('font')));
$data->set('fontlabel', $import->fixSection($data->get('fontlabel')));
return $data;
}
public function globalDefaultItemFontAndStyle($container) {
$table = new ContainerTable($container, $this->getType(), $this->getTitle());
$row1 = $table->createRow($this->getType() . '-1');
new Font($row1, 'item-counter-font', n2_('Counter'), $this->fonts['font']['value'], array(
'mode' => 'simple'
));
new Font($row1, 'item-counter-fontlabel', n2_('Label'), $this->fonts['fontlabel']['value'], array(
'mode' => 'simple'
));
}
public function renderFields($container) {
$counter = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-counter', n2_('Counter'));
new Number($counter, 'value', n2_('Value'), '', array(
'wide' => 5
));
new Number($counter, 'startvalue', n2_('Start from'), '', array(
'wide' => 5
));
$labels = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-counter-labels', n2_('Labels'));
new Text($labels, 'pre', n2_('Pre'), '', array(
'style' => 'width:50px;'
));
new Text($labels, 'post', n2_('Post'), '', array(
'style' => 'width:50px;'
));
new Text($labels, 'label', n2_('Label'), '', array(
'style' => 'width:150px;'
));
new Select($labels, 'labelplacement', n2_('Placement'), '', array(
'options' => array(
'before' => n2_('Before'),
'after' => n2_('After')
)
));
$animation = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-counter-animation', n2_('Animation'));
new Number($animation, 'animationduration', n2_('Animation duration'), 1, array(
'min' => 0,
'wide' => 5,
'unit' => 'ms'
));
new Number($animation, 'animationdelay', n2_('Delay'), 0, array(
'min' => 0,
'wide' => 5,
'unit' => 'ms'
));
new HiddenFont($counter, 'font', n2_('Font') . ' - ' . n2_('Counter'), '', array(
'mode' => 'simple'
));
new HiddenFont($counter, 'fontlabel', n2_('Font') . ' - ' . n2_('Label'), '', array(
'mode' => 'simple'
));
}
} Renderable/Item/Counter/ItemCounterFrontend.php 0000644 00000006714 15235523313 0015605 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\Counter;
use Nextend\Framework\Sanitize;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Renderable\Item\AbstractItemFrontend;
class ItemCounterFrontend extends AbstractItemFrontend {
public function isAuto() {
return true;
}
public function render() {
return $this->getHtml();
}
public function renderAdminTemplate() {
return $this->getHtml();
}
private function getHtml() {
$owner = $this->layer->getOwner();
$value = intval($owner->fill($this->data->get('value')));
$min = min(0, $value);
$startvalue = max(intval($owner->fill($this->data->get('startvalue'))), $min);
$total = max($startvalue, $value);
$duration = max(0, intval($this->data->get('animationduration')));
if ($total != $min) {
$toPercent = (min($value, $total) - $min) / ($total - $min);
if ($duration == 0) {
// We do not have animation
$fromPercent = $toPercent;
} else {
$fromPercent = (min($startvalue, $total) - $min) / ($total - $min);
}
} else {
$duration = 0;
$fromPercent = $toPercent = 0;
}
$label = Sanitize::filter_allowed_html($owner->fill($this->data->get('label')));
$placement = '';
if (!empty($label)) {
$fontLabel = $owner->addFont($this->data->get('fontlabel'), 'simple');
$labelHTML = Html::tag('div', array(
'class' => $fontLabel
), $label);
$placement = $this->data->get('labelplacement');
}
$html = '';
if ($placement == 'before') {
$html .= $labelHTML;
}
$font = $owner->addFont($this->data->get('font'), 'simple');
$pre = Sanitize::filter_allowed_html($this->data->get('pre'));
$post = Sanitize::filter_allowed_html($this->data->get('post'));
$countingDivHTML = Html::tag('div', array(
'class' => 'n2-ss-item-counter-counting-div n2-ow ' . $font
), $pre . round($min + $fromPercent * ($total - $min)) . $post);
$html .= Html::tag('div', array(
'id' => $this->id,
'class' => 'n2-ow'
), $countingDivHTML);
if ($placement == 'after') {
$html .= $labelHTML;
}
$jsData = array(
'name' => 'counter',
'pre' => $pre,
'post' => $post,
'fromPercent' => $fromPercent,
'toPercent' => $toPercent,
'duration' => $duration,
'delay' => $this->data->get('animationdelay'),
'min' => $min,
'total' => $total,
'counting' => '.n2-ss-item-counter-counting-div',
'displayMode' => false
);
if ($this->isEditor && $owner->underEdit) {
$owner->addScript('new _N2.CounterItemAdmin(this, "' . $this->id . '", ' . json_encode($jsData) . ');');
} else {
$owner->addScript('new _N2.FrontendItemCounter(this, "' . $this->id . '", ' . json_encode($jsData) . ');');
}
return Html::tag('div', array(
'class' => 'n2-ss-item-content n2-ow'
), $html);
}
} Renderable/Item/Countdown/ItemCountdown.php 0000644 00000026176 15235523313 0015013 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\Countdown;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\Font;
use Nextend\Framework\Form\Element\Gap;
use Nextend\Framework\Form\Element\Grouping;
use Nextend\Framework\Form\Element\Hidden\HiddenFont;
use Nextend\Framework\Form\Element\Hidden\HiddenStyle;
use Nextend\Framework\Form\Element\Message\Notice;
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\Form\Fieldset;
use Nextend\Framework\Platform\Platform;
use Nextend\SmartSlider3\Form\Element\DatePicker;
use Nextend\SmartSlider3\Renderable\Item\AbstractItem;
class ItemCountdown extends AbstractItem {
protected $ordering = 11;
protected $fonts = array(
'font' => array(
'defaultName' => 'item-countdown-font',
'value' => '{"data":[{"extra":"","color":"ffffffff","size":"40||px","tshadow":"0|*|0|*|0|*|000000ff","lineheight":"1","bold":0,"italic":0,"underline":0,"align":"inherit","letterspacing":"normal","wordspacing":"normal","texttransform":"none"}]}'
),
'fontlabel' => array(
'defaultName' => 'item-countdown-fontlabel',
'value' => '{"data":[{"extra":"","color":"ffffffff","size":"16||px","tshadow":"0|*|0|*|0|*|000000ff","lineheight":"1","bold":0,"italic":0,"underline":0,"align":"inherit","letterspacing":"normal","wordspacing":"normal","texttransform":"capitalize"}]}'
)
);
protected $styles = array(
'style' => array(
'defaultName' => 'item-countdown-style',
'value' => ''
)
);
protected function isBuiltIn() {
return true;
}
public function getType() {
return 'countdown';
}
public function getTitle() {
return n2_('Countdown');
}
public function getIcon() {
return 'ssi_32 ssi_32--countdown';
}
public function getGroup() {
return n2_x('Special', 'Layer group');
}
public function createFrontend($id, $itemData, $layer) {
return new ItemCountdownFrontend($this, $id, $itemData, $layer);
}
public function getValues() {
return parent::getValues() + array(
'slide-schedule' => 0,
'date' => date('Y-m-d H:i:s'),
'gap' => '10|*|10',
'columns' => 4,
'label' => 1,
'tablet-style' => 0,
'tablet-gap' => '10|*|10',
'tablet-columns' => 4,
'mobile-style' => 0,
'mobile-gap' => '10|*|10',
'mobile-columns' => 1,
'action' => '',
'redirect-url' => ''
);
}
public function prepareExport($export, $data) {
parent::prepareExport($export, $data);
$export->addVisual($data->get('font'));
$export->addVisual($data->get('style'));
$export->addVisual($data->get('fontlabel'));
}
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('fontlabel', $import->fixSection($data->get('fontlabel')));
return $data;
}
public function globalDefaultItemFontAndStyle($container) {
$table = new ContainerTable($container, $this->getType(), $this->getTitle());
$row1 = $table->createRow($this->getType() . '-1');
new Font($row1, 'item-countdown-font', n2_('Countdown'), $this->fonts['font']['value'], array(
'mode' => 'simple'
));
new Font($row1, 'item-countdown-fontlabel', n2_('Label'), $this->fonts['fontlabel']['value'], array(
'mode' => 'simple'
));
new Style($row1, 'item-countdown-style', n2_('Countdown'), $this->styles['style']['value'], array(
'mode' => 'heading'
));
}
public function loadResources($renderable) {
parent::loadResources($renderable);
$renderable->addLess(self::getAssetsPath() . '/countdown.n2less', array(
'sliderid' => $renderable->elementId
));
}
public function renderFields($container) {
$offset = (Platform::getTimestamp() - gmdate('U', time() - date('Z'))) / 60;
$minutes = $offset % 60;
$hours = (int)($offset / 60);
Js::addGlobalInline('window.ssTimezoneOffset=' . json_encode(sprintf('%+03d:%02d', $hours, $minutes)) . ';');
$dateFieldset = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-countdown', n2_('Date'));
new OnOff($dateFieldset, 'slide-schedule', n2_('Use slide schedule'), 0, array(
'relatedFieldsOff' => array(
'item_countdowndate'
),
'relatedFieldsOn' => array(
'item_countdownschedule-notice'
),
'tipLabel' => n2_('Use slide schedule'),
'tipDescription' => n2_('You can use the "Unpublished on" date of the slide itself.'),
'tipLink' => 'https://smartslider.helpscoutdocs.com/article/2047-countdown-layer#use-slide-schedule'
));
new Notice($dateFieldset, 'schedule-notice', n2_('Use Slide Schedule'), n2_('Go to Slide → Content tab and set the Unpublish on date for the slide.'));
$dateGroup = new Grouping($dateFieldset, 'date-group');
new DatePicker($dateGroup, 'date', 'Date', date('Y-m-d H:i:s'), array(
'onOff' => false
));
new HiddenFont($dateFieldset, 'font', n2_('Font') . ' - ' . n2_('Countdown'), '', array(
'mode' => 'simple'
));
new HiddenFont($dateFieldset, 'fontlabel', n2_('Font') . ' - ' . n2_('Label'), '', array(
'mode' => 'simple'
));
new HiddenStyle($dateFieldset, 'style', false, '', array(
'mode' => 'heading'
));
$style = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-countdown-style', n2_('Style'));
new OnOff($style, 'label', n2_('Show label'), 1, array(
'tipLabel' => n2_('Show label'),
'tipDescription' => n2_('Displays the days, hours, minutes and seconds texts under the counter numbers. To display the labels in your own language, translate the texts in the language files.'),
'tipLink' => 'https://smartslider.helpscoutdocs.com/article/1938-translation#translation'
));
$gap = new Gap($style, 'gap', n2_('Gap'), '10|*|10', array(
'tipLabel' => n2_('Gap'),
'tipDescription' => n2_('Creates vertical and horizontal distance between the counter elements.')
));
$gap->setUnit('px');
for ($i = 1; $i < 3; $i++) {
new NumberAutoComplete($gap, 'gap-' . $i, false, '', array(
'values' => array(
0,
5,
10,
20,
30
),
'wide' => 3
));
}
new Select($style, 'columns', n2_('Columns'), '4', array(
'options' => array(
'1' => '1',
'2' => '2',
'4' => '4'
)
));
$tabletStyleGroup = new Grouping($style, 'tablet-style-group');
new OnOff($tabletStyleGroup, 'tablet-style', n2_('Tablet style'), 0, array(
'relatedFieldsOn' => array(
'item_countdowntablet-gap',
'item_countdowntablet-columns'
),
'tipLabel' => n2_('Tablet style'),
'tipDescription' => n2_('Set custom Gap and Column for tablet.')
));
$gap = new Gap($tabletStyleGroup, 'tablet-gap', n2_('Gap'), '10|*|10');
$gap->setUnit('px');
for ($i = 1; $i < 3; $i++) {
new NumberAutoComplete($gap, 'tablet-gap-' . $i, false, '', array(
'values' => array(
0,
5,
10,
20,
30
),
'wide' => 3
));
}
new Select($tabletStyleGroup, 'tablet-columns', n2_('Columns'), '4', array(
'options' => array(
'1' => '1',
'2' => '2',
'4' => '4'
)
));
$mobileStyleGroup = new Grouping($style, 'mobile-style-group');
new OnOff($mobileStyleGroup, 'mobile-style', n2_('Mobile style'), 0, array(
'relatedFieldsOn' => array(
'item_countdownmobile-gap',
'item_countdownmobile-columns'
),
'tipLabel' => n2_('Mobile style'),
'tipDescription' => n2_('Set custom Gap and Column for mobile.')
));
$gap = new Gap($mobileStyleGroup, 'mobile-gap', n2_('Gap'), '10|*|10');
$gap->setUnit('px');
for ($i = 1; $i < 3; $i++) {
new NumberAutoComplete($gap, 'mobile-gap-' . $i, false, '', array(
'values' => array(
0,
5,
10,
20,
30
),
'wide' => 3
));
}
new Select($mobileStyleGroup, 'mobile-columns', n2_('Columns'), '4', array(
'options' => array(
'1' => '1',
'2' => '2',
'4' => '4'
)
));
$general = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-countdown-general', n2_('General'));
new Select($general, 'action', n2_('Action when ends'), '4', array(
'options' => array(
'' => n2_('No action'),
'hideLayer' => n2_('Hide layer'),
'redirect' => n2_('Redirect to URL'),
),
'relatedValueFields' => array(
array(
'values' => array(
'redirect',
),
'field' => array(
'item_countdownredirect-url'
)
)
),
'tipLabel' => n2_('Action when ends'),
'tipDescription' => n2_('Choose what happens after the counter reached zero.'),
'tipLink' => 'https://smartslider.helpscoutdocs.com/article/2047-countdown-layer#action-when-ends'
));
new Text($general, 'redirect-url', n2_('Redirect to URL'), '', array(
'style' => 'width: 140px;'
));
}
} Renderable/Item/Countdown/ItemCountdownFrontend.php 0000644 00000013133 15235523313 0016500 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\Countdown;
use Nextend\Framework\Platform\Platform;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Renderable\AbstractRenderableOwner;
use Nextend\SmartSlider3\Renderable\Item\AbstractItemFrontend;
class ItemCountdownFrontend extends AbstractItemFrontend {
private $font, $style, $fontLabel;
public function isAuto() {
return true;
}
public function render() {
return $this->getHtml();
}
public function renderAdminTemplate() {
return $this->getHtml();
}
private function getHtml() {
$owner = $this->layer->getOwner();
$this->loadResources($owner);
if ($this->data->get('slide-schedule')) {
$date = $this->layer->getOwner()->publish_down;
} else {
$date = $this->data->get('date');
}
if (empty($date)) {
$date = date('Y-m-d H:i:s', time() + 86400);
}
$currentTimestampUtc = gmdate('U');
$timezoneOffset = Platform::getTimestamp() - $currentTimestampUtc;
/**
* Adjust date to GMT
*/
$timestampUTC = strtotime($date) - $timezoneOffset;
$diff = $timestampUTC - $currentTimestampUtc;
$days = 0;
$hours = 0;
$minutes = 0;
$seconds = 0;
if ($diff > 0) {
$days = floor($diff / 86400);
$diff -= $days * 86400;
$hours = floor($diff / 3600);
$diff -= $hours * 3600;
$minutes = floor($diff / 60);
$diff -= $minutes * 60;
$seconds = $diff;
}
$this->font = $owner->addFont($this->data->get('font'), 'simple');
$this->fontLabel = $owner->addFont($this->data->get('fontlabel'), 'simple');
$this->style = $owner->addStyle($this->data->get('style'), 'heading');
$columns = $this->data->get('columns', 4);
$gap = explode('|*|', $this->data->get('gap', '10|*|10'));
$cssVariables = array(
'--ss-counter-columns:' . $columns,
'--ss-counter-gap-v:' . $gap[0] . 'px',
'--ss-counter-gap-h:' . $gap[1] . 'px'
);
if ($this->data->get('tablet-style')) {
$tabletColumns = $this->data->get('tablet-columns', 4);
if ($columns !== $tabletColumns) {
$cssVariables[] = '--ss-counter-tablet-columns:' . $tabletColumns;
}
$tabletGap = explode('|*|', $this->data->get('tablet-gap', '10|*|10'));
if ($gap[0] !== $tabletGap[0]) {
$cssVariables[] = '--ss-counter-tablet-gap-v:' . $tabletGap[0] . 'px';
}
if ($gap[1] !== $tabletGap[1]) {
$cssVariables[] = '--ss-counter-tablet-gap-h:' . $tabletGap[1] . 'px';
}
}
if ($this->data->get('mobile-style')) {
$mobileColumns = $this->data->get('mobile-columns', 4);
if ($columns !== $mobileColumns) {
$cssVariables[] = '--ss-counter-mobile-columns:' . $mobileColumns;
}
$mobileGap = explode('|*|', $this->data->get('mobile-gap', '10|*|10'));
if ($gap[0] !== $mobileGap[0]) {
$cssVariables[] = '--ss-counter-mobile-gap-v:' . $mobileGap[0] . 'px';
}
if ($gap[1] !== $mobileGap[1]) {
$cssVariables[] = '--ss-counter-mobile-gap-h:' . $mobileGap[1] . 'px';
}
}
return Html::tag('div', array(
'class' => 'n2-ss-item-countdown_container n2-ss-item-content n2-ow-all',
'style' => implode(';', $cssVariables),
'data-timestamp' => $timestampUTC,
'data-action' => $this->data->get('action'),
'data-redirect-url' => $this->data->get('redirect-url')
), implode(array(
$this->createCard('day', $days, n2_('Days')),
$this->createCard('hour', $hours, n2_('Hours')),
$this->createCard('minute', $minutes, n2_('Minutes')),
$this->createCard('second', $seconds, n2_('Seconds'))
)));
}
private function createCard($element, $value, $label) {
$labelHTML = '';
if ($this->data->get('label', 1)) {
$labelHTML = Html::tag('div', array(
'class' => 'n2-ss-item-countdown_label ' . $this->fontLabel
), $label);
}
return Html::tag('div', array(
'class' => 'n2-ss-item-countdown_element n2-ss-item-countdown_' . $element . ' ' . $this->style
), Html::tag('div', array(
'class' => 'n2-ss-item-countdown_number ' . $this->font
), $this->formatNumber($value)) . $labelHTML);
}
private function formatNumber($number) {
if ($number < 10) {
return '0' . $number;
} else {
return $number;
}
}
/**
* @param AbstractRenderableOwner $owner
*/
public function loadResources($owner) {
$owner->addLess(self::getAssetsPath() . "/countdown.n2less", array(
"sliderid" => $owner->getElementID()
));
if (!$this->layer->getOwner()
->isAdmin() && !$owner->isScriptAdded('countdown')) {
$owner->addScript('this.sliderElement.querySelectorAll(\'.n2-ss-item-countdown_container\').forEach((function(el){new _N2.FrontendItemCountdown(el, this)}).bind(this));', 'countdown');
}
}
} Renderable/Item/CircleCounter/ItemCircleCounter.php 0000644 00000015745 15235523313 0016355 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\CircleCounter;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\Font;
use Nextend\Framework\Form\Element\Hidden\HiddenFont;
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\Number;
use Nextend\Framework\Form\Element\Text\NumberSlider;
use Nextend\Framework\Form\Fieldset;
use Nextend\SmartSlider3\Renderable\Item\AbstractItem;
class ItemCircleCounter extends AbstractItem {
protected $ordering = 11;
protected $fonts = array(
'font' => array(
'defaultName' => 'item-circlecounter-font',
'value' => '{"data":[{"extra":"","color":"ffffffff","size":"40||px","tshadow":"0|*|0|*|0|*|000000ff","lineheight":"1","bold":0,"italic":0,"underline":0,"align":"center","letterspacing":"normal","wordspacing":"normal","texttransform":"none"}]}'
),
'fontlabel' => array(
'defaultName' => 'item-circlecounter-fontlabel',
'value' => '{"data":[{"extra":"","color":"ffffffff","size":"16||px","tshadow":"0|*|0|*|0|*|000000ff","lineheight":"2","bold":0,"italic":0,"underline":0,"align":"center","letterspacing":"normal","wordspacing":"normal","texttransform":"none"}]}'
)
);
protected function isBuiltIn() {
return true;
}
public function getType() {
return 'circlecounter';
}
public function getTitle() {
return n2_('Circle counter');
}
public function getIcon() {
return 'ssi_32 ssi_32--circlecounter';
}
public function getGroup() {
return n2_x('Special', 'Layer group');
}
public function createFrontend($id, $itemData, $layer) {
return new ItemCircleCounterFrontend($this, $id, $itemData, $layer);
}
public function loadResources($renderable) {
parent::loadResources($renderable);
$renderable->addLess(self::getAssetsPath() . "/circlecounter.n2less", array(
"sliderid" => $renderable->elementId
));
}
public function getValues() {
return parent::getValues() + array(
'value' => 50,
'startvalue' => 0,
'total' => 100,
'size' => 200,
'strokewidth' => 10,
'color' => '00000033',
'color2' => '64c133ff',
'pre' => '',
'post' => '%',
'label' => '',
'labelplacement' => 'after',
'animationduration' => 1000,
'animationdelay' => 0
);
}
public function getFilled($slide, $data) {
$data = parent::getFilled($slide, $data);
$data->set('label', $slide->fill($data->get('label', '')));
return $data;
}
public function prepareExport($export, $data) {
parent::prepareExport($export, $data);
$export->addVisual($data->get('font'));
$export->addVisual($data->get('fontlabel'));
}
public function prepareImport($import, $data) {
$data = parent::prepareImport($import, $data);
$data->set('font', $import->fixSection($data->get('font')));
$data->set('fontlabel', $import->fixSection($data->get('fontlabel')));
return $data;
}
public function globalDefaultItemFontAndStyle($container) {
$table = new ContainerTable($container, $this->getType(), $this->getTitle());
$row1 = $table->createRow($this->getType() . '-1');
new Font($row1, 'item-circlecounter-font', n2_('Counter'), $this->fonts['font']['value'], array(
'mode' => 'simple'
));
new Font($row1, 'item-circlecounter-fontlabel', n2_('Label'), $this->fonts['fontlabel']['value'], array(
'mode' => 'simple'
));
}
public function renderFields($container) {
$counter = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-circlecounter', n2_('Counter'));
new Number($counter, 'value', n2_('Value'), '', array(
'wide' => 5
));
new Number($counter, 'startvalue', n2_('Start from'), '', array(
'wide' => 5
));
new Number($counter, 'total', n2_('Total'), '', array(
'wide' => 5
));
$display = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-circlecounter-display', n2_('Display'));
new Color($display, 'color', n2_('Color'), '', array(
'alpha' => true
));
new Color($display, 'color2', n2_('Active color'), '', array(
'alpha' => true
));
new NumberSlider($display, 'size', n2_('Size'), '', array(
'min' => 20,
'max' => 1000,
'sliderMax' => 500,
'step' => 10,
'unit' => 'px',
'wide' => 4
));
new NumberSlider($display, 'strokewidth', n2_('Stroke width'), '', array(
'min' => 1,
'max' => 300,
'sliderMax' => 100,
'step' => 1,
'unit' => 'px',
'wide' => 3
));
$labels = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-circlecounter-labels', n2_('Labels'));
new Text($labels, 'label', n2_('Label'), '', array(
'style' => 'width:150px;'
));
new Select($labels, 'labelplacement', n2_('Placement'), '', array(
'options' => array(
'before' => n2_('Before'),
'innerbefore' => n2_('Inner before'),
'innerafter' => n2_('Inner after'),
'after' => n2_('After')
)
));
new Text($labels, 'pre', n2_('Pre'), '', array(
'style' => 'width:40px;'
));
new Text($labels, 'post', n2_('Post'), '', array(
'style' => 'width:40px;'
));
$animation = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-circlecounter-animation', n2_('Animation'));
new Number($animation, 'animationduration', n2_('Animation duration'), 1, array(
'min' => 0,
'wide' => 5,
'unit' => 'ms'
));
new Number($animation, 'animationdelay', n2_('Delay'), 0, array(
'min' => 0,
'wide' => 5,
'unit' => 'ms'
));
new HiddenFont($counter, 'font', n2_('Font') . ' - ' . n2_('Counter'), '', array(
'mode' => 'simple'
));
new HiddenFont($counter, 'fontlabel', n2_('Font') . ' - ' . n2_('Label'), '', array(
'mode' => 'simple'
));
}
} Renderable/Item/CircleCounter/ItemCircleCounterFrontend.php 0000644 00000013407 15235523313 0020046 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\CircleCounter;
use Nextend\Framework\Parser\Color;
use Nextend\Framework\Sanitize;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Renderable\AbstractRenderableOwner;
use Nextend\SmartSlider3\Renderable\Item\AbstractItemFrontend;
class ItemCircleCounterFrontend extends AbstractItemFrontend {
public function isAuto() {
return true;
}
public function render() {
return $this->getHtml();
}
public function renderAdminTemplate() {
return $this->getHtml();
}
private function getHtml() {
$owner = $this->layer->getOwner();
$this->loadResources($owner);
$value = intval($this->data->get('value'));
$min = min(0, $value);
$strokeWidth = intval($this->data->get('strokewidth'));
$size = max(intval($this->data->get('size')), $strokeWidth + 1);
$startValue = max(intval($this->data->get('startvalue')), $min);
$total = max(max(intval($this->data->get('total')), $startValue), $value);
$duration = max(0, intval($this->data->get('animationduration')));
$center = $size / 2;
$r = ($size - $strokeWidth) / 2;
$c = pi() * $r * 2;
if ($total != $min) {
$toPercent = (min($value, $total) - $min) / ($total - $min);
if ($duration == 0) {
// We do not have animation
$fromPercent = $toPercent;
} else {
$fromPercent = (min($startValue, $total) - $min) / ($total - $min);
}
} else {
$duration = 0;
$fromPercent = $toPercent = 0;
}
$pct = (1 - $fromPercent) * $c;
$labelHTML = '';
$label = Sanitize::filter_allowed_html($owner->fill($this->data->get('label')));
$placement = '';
if (!empty($label)) {
$fontLabel = $owner->addFont($this->data->get('fontlabel'), 'simple');
$labelHTML = Html::tag('div', array(
'class' => $fontLabel
), $label);
$placement = $this->data->get('labelplacement');
}
$html = '';
if ($placement == 'before') {
$html .= $labelHTML;
}
$font = $owner->addFont($this->data->get('font'), 'simple');
$pre = Sanitize::filter_allowed_html($this->data->get('pre'));
$post = Sanitize::filter_allowed_html($this->data->get('post'));
$countingDivHTML = Html::tag('div', array(
'class' => 'n2-ss-item-circlecounter-counting-div n2-ow ' . $font
), $pre . round($min + $fromPercent * ($total - $min)) . $post);
$html .= Html::openTag('div', array(
'id' => $this->id,
'class' => 'n2-ow n2-ss-item-circlecounter-svg-container',
'style' => 'width:' . $size . 'px;'
));
$color = $this->data->get('color');
$color2 = $this->data->get('color2');
$html .= '<svg class="svg" viewBox="0 0 ' . $size . ' ' . $size . '" version="1.1" style="width:' . $size . 'px;height:' . $size . 'px;" preserveAspectRatio="xMinYMin meet">';
$html .= '<circle class="fl-bar-bg" r="' . $r . '" cx="' . $center . '" cy="' . $center . '" stroke="#' . substr($color, 0, 6) . '" stroke-opacity="' . Color::hex2alpha($color) / 127 . '" stroke-width="' . $strokeWidth . '" stroke-dashoffset="0" stroke-dasharray="' . $c . '" fill="transparent"></circle>';
$html .= '<circle class="fl-bar" r="' . $r . '" cx="' . $center . '" cy="' . $center . '" stroke="#' . substr($color2, 0, 6) . '" stroke-opacity="' . Color::hex2alpha($color2) / 127 . '" stroke-width="' . $strokeWidth . '" stroke-dasharray="' . $c . '" stroke-dashoffset="' . $pct . '" transform="rotate(-90 ' . $center . ' ' . $center . ')" fill="transparent"></circle>';
$html .= '</svg>';
$html .= Html::openTag('div', array(
'class' => 'n2-ow n2-ss-item-circlecounter-svg-overlay'
));
if ($placement == 'innerbefore') {
$html .= $labelHTML;
}
$html .= $countingDivHTML;
if ($placement == 'innerafter') {
$html .= $labelHTML;
}
$html .= '</div>';
$html .= '</div>';
if ($placement == 'after') {
$html .= $labelHTML;
}
$jsData = array(
'name' => 'circlecounter',
'pre' => $pre,
'post' => $post,
'fromPercent' => $fromPercent,
'toPercent' => $toPercent,
'duration' => $duration,
'delay' => $this->data->get('animationdelay'),
'min' => $min,
'total' => $total,
'c' => $c,
'counting' => '.n2-ss-item-circlecounter-counting-div',
'displayMode' => 'circle',
'display' => 'circle + circle'
);
if ($this->isEditor && $owner->underEdit) {
$owner->addScript('new _N2.CounterItemAdmin(this, "' . $this->id . '", ' . json_encode($jsData) . ');');
} else {
$owner->addScript('new _N2.FrontendItemCounter(this, "' . $this->id . '", ' . json_encode($jsData) . ');');
}
return Html::tag('div', array(
'class' => 'n2-ss-item-content n2-ow'
), $html);
}
/**
* @param AbstractRenderableOwner $owner
*/
public function loadResources($owner) {
$owner->addLess(self::getAssetsPath() . "/circlecounter.n2less", array(
"sliderid" => $owner->getElementID()
));
}
} Renderable/Item/Caption/ItemCaption.php 0000644 00000023756 15235523313 0014046 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\Caption;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\Font;
use Nextend\Framework\Form\Element\Hidden\HiddenFont;
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\Text;
use Nextend\Framework\Form\Element\Text\Color;
use Nextend\Framework\Form\Element\Text\FieldImage;
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\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\SmartSlider3\Renderable\Item\AbstractItem;
class ItemCaption extends AbstractItem {
protected $ordering = 4;
protected $layerProperties = array(
"desktopportraitleft" => 0,
"desktopportraittop" => 0,
"desktopportraitwidth" => 200
);
protected $fonts = array(
'fonttitle' => array(
'defaultName' => 'item-caption-font-title',
'value' => '{"data":[{"color":"ffffffff","size":"14||px","align":"inherit"},{"extra":""},{"extra":""}]}'
),
'font' => array(
'defaultName' => 'item-caption-font',
'value' => '{"data":[{"color":"ffffffff","size":"14||px","align":"inherit"},{"extra":""},{"extra":""}]}'
)
);
protected function isBuiltIn() {
return true;
}
public function getType() {
return 'caption';
}
public function getTitle() {
return n2_('Caption');
}
public function getIcon() {
return 'ssi_32 ssi_32--imagecaption';
}
public function getGroup() {
return n2_x('Special', 'Layer group');
}
public function createFrontend($id, $itemData, $layer) {
return new ItemCaptionFrontend($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-caption-font-title', n2_('Title'), $this->fonts['fonttitle']['value'], array(
'mode' => 'paragraph'
));
new Font($row1, 'item-caption-font', n2_('Description'), $this->fonts['font']['value'], array(
'mode' => 'paragraph'
));
}
public function loadResources($renderable) {
parent::loadResources($renderable);
$renderable->addLess(self::getAssetsPath() . "/caption.n2less", array(
"sliderid" => $renderable->elementId
));
}
public function getValues() {
return parent::getValues() + array(
'animation' => 'Simple|*|left|*|0',
'image' => '$ss3-frontend$/images/placeholder/image.png',
'alt' => '',
'href' => '#',
'href-target' => '_self',
'href-rel' => '',
'verticalalign' => 'center',
'content' => n2_('Caption'),
'description' => '',
'color' => '00000080',
'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('content', $slide->fill($data->get('content', '')));
$data->set('description', $slide->fill($data->get('description', '')));
$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('font'));
$export->addVisual($data->get('fonttitle'));
$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('font', $import->fixSection($data->get('font')));
$data->set('fonttitle', $import->fixSection($data->get('fonttitle')));
$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-caption', n2_('General'));
new FieldImage($settings, 'image', n2_('Image'), '', array(
'relatedAlt' => 'item_captionalt',
'width' => 220
));
new Text($settings, 'content', n2_('Title'), '', array(
'style' => 'width:302px;'
));
new HiddenFont($settings, 'fonttitle', n2_('Font') . ' - ' . n2_('Title'), '', array(
'mode' => 'paragraph'
));
new Textarea($settings, 'description', n2_('Description'), '', array(
'width' => 314
));
new HiddenFont($settings, 'font', n2_('Font') . ' - ' . n2_('Description'), '', array(
'mode' => 'paragraph'
));
$link = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-caption-link', n2_('Link'));
new Url($link, 'href', n2_('Link'), '', array(
'relatedFields' => array(
'item_captionhref-target',
'item_captionhref-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>')
));
$animationFieldset = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-caption-animation', n2_('Animation'));
$animation = new MixedField($animationFieldset, 'animation', false, 'Simple|*|left|*|0');
new Select($animation, 'animation-1', n2_('Animation'), '', array(
'options' => array(
'Full' => n2_('Full'),
'Simple' => n2_('Simple'),
'Fade' => n2_('Fade')
),
'relatedValueFields' => array(
array(
'values' => array(
'Full',
'Simple'
),
'field' => array(
'animationitem_captionanimation-2'
)
),
array(
'values' => array(
'Full',
'Fade'
),
'field' => array(
'item_captionverticalalign'
)
)
)
));
new Select($animation, 'animation-2', n2_('Direction'), '', array(
'options' => array(
'top' => n2_('Top'),
'right' => n2_('Right'),
'bottom' => n2_('Bottom'),
'left' => n2_('Left')
)
));
new OnOff($animation, 'animation-3', n2_('Scale'), 0, array(
'tipLabel' => n2_('Scale'),
'tipDescription' => n2_('Scales up the image on hover')
));
$overlay = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-caption-overlay', n2_('Display'));
new Color($overlay, 'color', n2_('Overlay background'), '00000080', array(
'alpha' => true
));
new Select($overlay, 'verticalalign', n2_('Vertical align'), '', array(
'options' => array(
'flex-start' => n2_('Top'),
'center' => n2_('Center'),
'flex-end' => n2_('Bottom')
),
'tipLabel' => n2_('Vertical align'),
'tipDescription' => n2_('Positions the text inside the overlay.')
));
$seo = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-caption-seo', n2_('SEO'));
new Text($seo, 'alt', 'SEO - ' . n2_('Alt tag'), '', array(
'style' => 'width:302px;'
));
$optimize = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-caption-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/1839-caption-layer#optimize'
));
}
} Renderable/Item/Caption/ItemCaptionFrontend.php 0000644 00000006543 15235523313 0015541 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\Caption;
use Nextend\Framework\Parser\Color;
use Nextend\Framework\Parser\Common;
use Nextend\Framework\Sanitize;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Renderable\AbstractRenderableOwner;
use Nextend\SmartSlider3\Renderable\Item\AbstractItemFrontend;
class ItemCaptionFrontend extends AbstractItemFrontend {
public function render() {
return $this->getHtml();
}
public function renderAdminTemplate() {
return $this->getHtml();
}
private function getHtml() {
$owner = $this->layer->getOwner();
$this->loadResources($owner);
list($mode, $direction, $scale) = Common::parse($this->data->get('animation', 'Simple|*|left|*|0'));
switch ($direction) {
case 'top':
$axis = 'yP';
$ratio = -1;
break;
case 'right':
$axis = 'xP';
$ratio = 1;
break;
case 'bottom':
$axis = 'yP';
$ratio = 1;
break;
case 'left':
$axis = 'xP';
$ratio = -1;
break;
}
$owner->addScript('new _N2.FrontendItemCaption(this, "' . $this->id . '", "' . $mode . '",' . json_encode($axis) . ',' . json_encode($ratio) . ', ' . intval($scale) . ');');
$image = $owner->fill($this->data->get('image', ''));
$imageAttributes = array(
'alt' => htmlspecialchars($owner->fill($this->data->get('alt', '')))
);
$html = $owner->renderImage($this, $image, $imageAttributes);
$rgba = Color::colorToRGBA($this->data->get('color', '00000080'));
$html .= Html::openTag("div", array(
"class" => "n2-ss-item-caption-content",
"style" => "background: {$rgba};" . 'justify-content:' . $this->data->get('verticalalign', 'center') . ';'
));
$title = Sanitize::filter_allowed_html($owner->fill($this->data->get('content', '')));
if ($title != '') {
$fontTitle = $owner->addFont($this->data->get('fonttitle'), 'paragraph');
$html .= Html::tag("div", array("class" => 'n2-div-h4 ' . $fontTitle), $title);
}
$description = Sanitize::filter_allowed_html($owner->fill($this->data->get('description', '')));
if ($description != '') {
$font = $owner->addFont($this->data->get('font'), 'paragraph');
$html .= Html::tag("p", array("class" => $font), $description);
}
$html .= Html::closeTag("div");
$linkAttributes = array();
if ($this->isEditor) {
$linkAttributes['onclick'] = 'return false;';
}
return Html::tag("div", array(
"id" => $this->id,
"class" => "n2-ss-item-caption n2-ss-item-content n2-ow-all n2-ss-item-caption-" . $mode,
"data-direction" => $direction
), $this->getLink($html, $linkAttributes));
}
/**
* @param AbstractRenderableOwner $owner
*/
public function loadResources($owner) {
$owner->addLess(self::getAssetsPath() . "/caption.n2less", array(
"sliderid" => $owner->getElementID()
));
}
} Renderable/Item/BeforeAfter/ItemBeforeAfter.php 0000644 00000033522 15235523313 0015414 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\BeforeAfter;
use Nextend\Framework\Filesystem\Filesystem;
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\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\Element\Text\Number;
use Nextend\Framework\Form\Element\Text\NumberSlider;
use Nextend\Framework\Form\Fieldset;
use Nextend\Framework\Parser\Common;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\SmartSlider3\Renderable\Item\AbstractItem;
class ItemBeforeAfter extends AbstractItem {
protected $fonts = array(
'fontlabel' => array(
'defaultName' => 'item-beforeafter-fontlabel',
'value' => '{"data":[{"extra":"","color":"000000FF","size":"14||px","tshadow":"0|*|0|*|0|*|000000ff","lineheight":"1.2","bold":0,"italic":0,"underline":0,"align":"inherit","letterspacing":"normal","wordspacing":"normal","texttransform":"none"},{},{}]}'
),
'fontcaption' => array(
'defaultName' => 'item-beforeafter-fontcaption',
'value' => '{"data":[{"extra":"","color":"000000FF","size":"14||px","tshadow":"0|*|0|*|0|*|000000ff","lineheight":"1.2","bold":0,"italic":0,"underline":0,"align":"inherit","letterspacing":"normal","wordspacing":"normal","texttransform":"none"},{},{}]}'
)
);
protected function isBuiltIn() {
return true;
}
public function getType() {
return 'beforeafter';
}
public function getTitle() {
return n2_('Before After');
}
public function getIcon() {
return 'ssi_32 ssi_32--beforeafter';
}
public function getGroup() {
return n2_x('Special', 'Layer group');
}
public function createFrontend($id, $itemData, $layer) {
return new ItemBeforeAfterFrontend($this, $id, $itemData, $layer);
}
public function loadResources($renderable) {
parent::loadResources($renderable);
$renderable->addLess(self::getAssetsPath() . "/beforeAfter.n2less", array(
"sliderid" => $renderable->elementId
));
$renderable->addScript('_N2.ItemBeforeafter.svgUrlList=' . json_encode($this->getArrowUrlList()) . ';');
$renderable->addScript('_N2.ItemBeforeafter.svgTypeList=' . json_encode($this->getArrowTypeList()) . ';');
}
public function getValues() {
return parent::getValues() + array(
'imagebefore' => '$ss3-frontend$/images/placeholder/image.png',
'imageafter' => '$ss3-frontend$/images/placeholder/video.png',
'textbefore' => n2_('Before'),
'textafter' => n2_('After'),
'labelposition' => 'center',
'labelbackground' => 'FFFFFFFF',
'showlabel' => 1,
'labeltype' => 'normal',
'showcaption' => 0,
'captiontext' => n2_('Caption'),
'captiontype' => 'normal',
'captionposition' => '3-2',
'captionbackground' => 'FFFFFFFF',
'direction' => 'horizontal',
'interaction' => 'drag',
'dividerstyle' => 'arrow',
'dividercolor' => 'FFFFFFFF',
'dividerwidth' => '4',
'width' => '4',
'startposition' => '50',
'image-optimize' => 1
);
}
public function getFilled($slide, $data) {
$data = parent::getFilled($slide, $data);
$data->set('imagebefore', $slide->fill($data->get('imagebefore', '')));
$data->set('imageafter', $slide->fill($data->get('imageafter', '')));
$data->set('textbefore', $slide->fill($data->get('textbefore', '')));
$data->set('textafter', $slide->fill($data->get('textafter', '')));
$data->set('captiontext', $slide->fill($data->get('captiontext', '')));
$data->set('altbefore', $slide->fill($data->get('altbefore', '')));
$data->set('altafter', $slide->fill($data->get('altafter', '')));
return $data;
}
public function prepareExport($export, $data) {
parent::prepareExport($export, $data);
$export->addVisual($data->get('fontlabel'));
$export->addVisual($data->get('fontcaption'));
$export->addImage($data->get('imagebefore', ''));
$export->addImage($data->get('imageafter', ''));
}
public function prepareImport($import, $data) {
$data = parent::prepareImport($import, $data);
$data->set('fontlabel', $import->fixSection($data->get('fontlabel')));
$data->set('fontcaption', $import->fixSection($data->get('fontcaption')));
$data->set('imagebefore', $import->fixImage($data->get('imagebefore')));
$data->set('imageafter', $import->fixImage($data->get('imageafter')));
return $data;
}
public function prepareSample($data) {
$data->set('imagebefore', ResourceTranslator::toUrl($data->get('imagebefore', '')));
$data->set('imageafter', ResourceTranslator::toUrl($data->get('imageafter', '')));
return $data;
}
private function getArrowTypeList() {
return array(
'arrow' => 'default',
'circle' => 'custom',
'rectangle' => 'custom'
);
}
private function getArrowUrlList() {
static $types = null;
if ($types === null) {
$types = array();
$extension = 'svg';
$folder = self::getAssetsPath() . '/svg/';
$files = Filesystem::files($folder);
foreach ($files as $file) {
$pathInfo = pathinfo($file);
if (isset($pathInfo['extension']) && $pathInfo['extension'] == $extension) {
$types[$pathInfo['filename']] = Filesystem::readFile($folder . $file);;
}
}
}
return $types;
}
public function getArrowSvg($type) {
$arrowList = $this->getArrowUrlList();
if (isset($this->getArrowTypeList()[$type])) {
$arrow = $arrowList["arrow_" . $this->getArrowTypeList()[$type]];
return $arrow;
}
return false;
}
private function getCaptionTypes() {
return array(
'1-1' => n2_('Left top'),
'1-2' => n2_('Center top'),
'1-3' => n2_('Right top'),
'2-1' => n2_('Left center'),
'2-2' => n2_('Center'),
'2-3' => n2_('Right Center'),
'3-1' => n2_('Left bottom'),
'3-2' => n2_('Center bottom'),
'3-3' => n2_('Right bottom')
);
}
public function globalDefaultItemFontAndStyle($container) {
$table = new ContainerTable($container, $this->getType(), $this->getTitle());
$row1 = $table->createRow($this->getType() . '-1');
new Font($row1, 'item-beforeafter-fontlabel', false, $this->fonts['fontlabel']['value'], array(
'mode' => 'simple'
));
new Font($row1, 'item-beforeafter-captionlabel', false, $this->fonts['fontcaption']['value'], array(
'mode' => 'simple'
));
}
public function renderFields($container) {
$general = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-beforeafter', n2_('General'));
new FieldImage($general, 'imagebefore', n2_('Before Image'), '', array(
'width' => 220,
'relatedFields' => array(
'item_beforeafteraltbefore'
)
));
new FieldImage($general, 'imageafter', n2_('After Image'), '', array(
'width' => 220,
'relatedFields' => array(
'item_beforeafteraltafter'
)
));
$label = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-beforeafter-label', n2_('Label'));
new OnOff($label, 'showlabel', n2_('Labels'), 1, array(
'relatedFieldsOn' => array(
'item_beforeaftertextbefore',
'item_beforeaftertextafter',
'item_beforeafterlabelposition',
'item_beforeafterlabeltype',
'item_beforeafterlabelbackground',
)
));
new Select($label, 'labeltype', n2_('Show Label'), '', array(
'options' => array(
'normal' => n2_('Normal'),
'hover' => n2_('Hover'),
'always' => n2_('Always')
)
));
new Select($label, 'labelposition', n2_('Position'), '', array(
'options' => array(
'start' => n2_('Start'),
'center' => n2_('Center'),
'end' => n2_('End')
)
));
new Text($label, 'textbefore', n2_('Before label'), '', array(
'style' => 'width:132px;',
));
new Text($label, 'textafter', n2_('After label'), '', array(
'style' => 'width:132px;',
));
new Color($label, 'labelbackground', n2_('Background'), 'FFFFFFFF', array(
'alpha' => true,
'style' => "width:75px"
));
new HiddenFont($label, 'fontlabel', n2_('Font') . ' - ' . n2_('Label'), '', array(
'mode' => 'simple'
));
$behavior = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-beforeafter-behavior', n2_('Behavior'));
new Select($behavior, 'direction', n2_('Direction'), '', array(
'options' => array(
'horizontal' => n2_('Horizontal'),
'vertical' => n2_('Vertical'),
)
));
new Select($behavior, 'interaction', n2_('Interaction'), 'drag', array(
'options' => array(
'drag' => n2_('Drag'),
'hover' => n2_('Hover'),
)
));
$divider = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-beforeafter-divider', n2_('Divider'));
new Select($divider, 'dividerstyle', n2_('Type'), 'arrow', array(
'options' => array(
'line' => n2_('Line'),
'arrow' => n2_('Arrow'),
'circle' => n2_('Circle'),
'rectangle' => n2_('Rectangle'),
)
));
new Color($divider, 'dividercolor', n2_('Color'), 'FFFFFFFF', array(
'alpha' => true,
'style' => "width:65px"
));
$caption = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-beforeafter-caption', n2_('Caption'));
new OnOff($caption, 'showcaption', n2_('Caption'), 0, array(
'relatedFieldsOn' => array(
'item_beforeaftercaptiontype',
'item_beforeaftercaptionposition',
'item_beforeaftercaptiontext',
'item_beforeaftercaptionbackground',
)
));
new Select($caption, 'captiontype', n2_('Show Caption'), 'normal', array(
'options' => array(
'normal' => n2_('Normal'),
'hover' => n2_('Hover'),
'always' => n2_('Always')
)
));
new Select($caption, 'captionposition', n2_('Position'), '', array(
'options' => $this->getCaptionTypes()
));
new Text($caption, 'captiontext', n2_('Caption text'), 'Caption', array(
'style' => 'width:132px;',
));
new Color($caption, 'captionbackground', n2_('Background'), 'FFFFFFFF', array(
'alpha' => true,
'style' => "width:75px"
));
new HiddenFont($caption, 'fontcaption', n2_('Font') . ' - ' . n2_('Caption'), '', array(
'mode' => 'simple'
));
new NumberSlider($divider, 'startposition', n2_('Position'), 50, array(
'min' => 0,
'max' => 100,
'unit' => '%',
'style' => "width:15px;",
'sliderMax' => 100,
'step' => 5,
'wide' => 4
));
new Select($divider, 'dividerwidth', n2_('Width'), 4, array(
'options' => array(
'2' => '2',
'4' => '4',
'6' => '6',
'8' => '8',
'10' => '10'
)
));
$seo = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-beforeafter-seo', n2_('SEO'));
new Text($seo, 'altbefore', n2_('Before image alt tag'), '', array(
'style' => 'width:132px;'
));
new Text($seo, 'altafter', n2_('After image alt tag'), '', array(
'style' => 'width:132px;'
));
$optimize = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-caption-optimize', n2_('Optimize'));
new OnOff($optimize, 'image-optimize', n2_('Optimize images'), 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/1839-caption-layer#optimize'
));
}
} Renderable/Item/BeforeAfter/ItemBeforeAfterFrontend.php 0000644 00000021523 15235523313 0017112 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\BeforeAfter;
use Nextend\Framework\Parser\Color;
use Nextend\Framework\Sanitize;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Renderable\AbstractRenderableOwner;
use Nextend\SmartSlider3\Renderable\Item\AbstractItemFrontend;
class ItemBeforeAfterFrontend extends AbstractItemFrontend {
public function render() {
return $this->getHtml();
}
public function renderAdminTemplate() {
return $this->getHtml();
}
private function getHtml() {
$image = $this->data->get('imagebefore', '');
$image2 = $this->data->get('imageafter', '');
if (empty($image) && empty($image2)) {
return '';
}
$owner = $this->layer->getOwner();
$this->loadResources($owner);
$image = $owner->fill($image);
$image2 = $owner->fill($image2);
if (empty($image) && empty($image2)) {
return '';
}
$attributes = [
'direction' => $this->data->get('direction', 'horizontal'),
'startposition' => $this->data->get('startposition', '50'),
'interaction' => $this->data->get('interaction', 'drag'),
'dividerstyle' => $this->data->get('dividerstyle', 'line'),
'dividercolor' => $this->data->get('dividercolor', '00000080'),
'dividerwidth' => $this->data->get('dividerwidth', '4'),
'labelpositon' => $this->data->get('labelposition', 'end'),
'labelfront' => $this->data->get('labelfront', '0'),
'labeltype' => $this->data->get('labeltype', 'normal'),
'showlabel' => $this->data->get('showlabel', 1),
'labelbackground' => $this->data->get('labelbackground', 'FFFFFF80'),
'fontlabel' => $owner->addFont($this->data->get('fontlabel'), 'simple'),
'fontcaption' => $owner->addFont($this->data->get('fontcaption'), 'simple'),
'showcaption' => $this->data->get('showcaption', ""),
'captiontype' => $this->data->get('captiontype', ""),
'captionbackground' => $this->data->get('captionbackground', "00000080"),
'captionpos' => $this->data->get('captionposition', "2-3"),
'captionrow' => '2',
'captioncol' => '3',
];
//need here because style
$gridValues = explode('-', $attributes['captionpos']);
$attributes['captionrow'] = $gridValues[0];
$attributes['captioncol'] = $gridValues[1];
//Container
$styles = "
--dividerColor : " . Color::colorToRGBA($attributes['dividercolor'], '00000080') . " ;
--dividerPos : " . $attributes['startposition'] . "%;
--imagePos : " . $attributes['startposition'] . "%;
--labelBackground : " . Color::colorToRGBA($attributes['labelbackground'], '00000080') . ";
--captionBackground : " . Color::colorToRGBA($attributes['captionbackground'], '00000080') . ";
--dividerWidth : " . $attributes['dividerwidth'] . "px;";
$containerInEditor = $this->isEditor ? "n2-ss-item-ba-container--ineditor" : "";
$html = Html::openTag("div", array(
'style' => $styles,
"class" => "n2-ss-item-ba-container n2-ss-item-ba-container--{$attributes['direction']} n2_container_scrollable $containerInEditor n2-ss-item-ba-container--interaction-{$attributes['interaction']}"
));
$labelBefore = $textBefore = "";
$labelAfter = $textAfter = "";
if ($attributes['showlabel']) {
$textBefore = Sanitize::filter_allowed_html($owner->fill($this->data->get('textbefore', "")));
$textAfter = Sanitize::filter_allowed_html($owner->fill($this->data->get('textafter', "")));
$show = $attributes['interaction'] === 'hover' && $attributes['labeltype'] === 'hover' ? 'normal' : $attributes['labeltype'];
$labelClass = $this->isEditor ? "" : "n2-ss-item-ba-label--show-$show n2-ss-text n2-ow ";
$labelClass .= $attributes['fontlabel'];
if ($textBefore) $labelBefore = "<div class='n2-ss-item-ba-label n2-ss-item-ba-label--before $labelClass'> $textBefore</div>";
if ($textAfter) $labelAfter = "<div class='n2-ss-item-ba-label n2-ss-item-ba-label--after $labelClass'> $textAfter</div>";
}
//Caption
if ($attributes['showcaption']) {
$captionText = Sanitize::filter_allowed_html($owner->fill($this->data->get('captiontext', "")));
if ($captionText != "") {
$show = $attributes['interaction'] === 'hover' && $attributes['captiontype'] === 'hover' ? 'normal' : $attributes['captiontype'];
$labelClass = $this->isEditor ? "" : "n2-ss-item-ba-caption--show-$show n2-ss-text n2-ow";
$caption = "<div class='n2-ss-item-ba-caption $labelClass {$attributes['fontcaption']}'> $captionText</div>";
$labelContainer = Html::tag('div', array(
"data-position" => $attributes['captionpos'],
"class" => "n2-ss-item-ba-caption-container"
), $caption);
$html .= $labelContainer;
}
}
//Images
$imageAttributes = array(
'alt' => htmlspecialchars($owner->fill($this->data->getIfEmpty('altbefore', $textBefore))),
'class' => 'n2-ow-all n2-ss-item-ba-image n2-ss-item-ba-image--before',
'draggable' => 'false'
);
$imageBefore = Html::tag("div", array(
"class" => "n2-ss-item-ba-image-container n2-ss-item-ba-image-container--bottom n2-ss-item-ba-label-container--{$attributes['labelpositon']}"
), $labelBefore . $owner->renderImage($this, $image, $imageAttributes));
$imageAttributes2 = array(
'alt' => htmlspecialchars($owner->fill($this->data->getIfEmpty('altafter', $textAfter))),
'class' => 'n2-ow-all n2-ss-item-ba-image n2-ss-item-ba-image--after',
'draggable' => 'false'
);
$imageAfter = Html::tag("div", array(
"class" => "n2-ss-item-ba-image-container n2-ss-item-ba-image-container--top n2-ss-item-ba-label-container--{$attributes['labelpositon']}"
), $labelAfter . $owner->renderImage($this, $image2, $imageAttributes2));
$html .= $imageBefore;
$html .= $imageAfter;
//Divider
$dividerClass = ($attributes['dividerstyle'] === 'line' || $attributes['dividerstyle'] === 'arrow') ? '' : 'n2-ss-item-ba-divider--gap';
$divider = Html::openTag("div", array(
"class" => "n2-ss-item-ba-divider $dividerClass"
));
//Divider-part-top
$divider .= "<div class='n2-ss-item-ba-divider-part n2-ss-item-ba-divider-part--top'></div>";
//Svg arrows
$svg = $this->item->getArrowSvg($attributes['dividerstyle']);
//arrowContainer
if ($svg) {
$arrowContainer = Html::tag("div", array(
"class" => "n2-ss-item-ba-arrow-container n2-ss-item-ba-arrow-container--{$attributes['dividerstyle']}"
), $svg . $svg);
$divider .= $arrowContainer;
}
//Divider-part-bottom
$divider .= "<div class='n2-ss-item-ba-divider-part n2-ss-item-ba-divider-part--bottom'></div>";
//Divider Close
$divider .= Html::closeTag('div');
//Dividercontainer
$dividerContainer = Html::tag("div", array(
"class" => "n2-ss-item-ba-divider-container"
), $divider);
$html .= $dividerContainer;
//Close Container
$html .= Html::closeTag('div');
$jsData = array(
'startPos' => $attributes['startposition'],
'interaction' => $attributes['interaction'],
'direction' => $attributes['direction'],
'labeltype' => $attributes['labeltype'],
'captiontype' => $attributes['captiontype'],
);
if (!$this->isEditor && !$owner->underEdit) {
$owner->addScript('new _N2.FrontendItemBeforeAfter(this, "' . $this->id . '", ' . json_encode($jsData) . ');');
}
return Html::tag("div", array(
"id" => $this->id,
"class" => "n2-ss-item-ba-wrapper n2-ss-item-content n2-ow-all"
), $html);
}
/**
* @param $owner AbstractRenderableOwner
*/
public function loadResources($owner) {
$owner->addLess(self::getAssetsPath() . "/beforeAfter.n2less", array(
"sliderid" => $owner->getElementID()
));
}
} Renderable/Item/Audio/ItemAudio.php 0000644 00000012552 15235523313 0013146 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\Audio;
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\Color;
use Nextend\Framework\Form\Element\Text\Video;
use Nextend\Framework\Form\Fieldset;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\SmartSlider3\Renderable\Item\AbstractItem;
class ItemAudio extends AbstractItem {
protected $ordering = 21;
protected $layerProperties = array(
"desktopportraitwidth" => 300
);
protected function isBuiltIn() {
return true;
}
public function getType() {
return 'audio';
}
public function getTitle() {
return n2_('Audio');
}
public function getIcon() {
return 'ssi_32 ssi_32--audio';
}
public function getGroup() {
return n2_x('Media', 'Layer group');
}
public function createFrontend($id, $itemData, $layer) {
return new ItemAudioFrontend($this, $id, $itemData, $layer);
}
/**
* @return array
*/
public function getValues() {
return parent::getValues() + array(
'audio_mp3' => '',
'volume' => 1,
'autoplay' => 0,
'loop' => 0,
'reset' => 0,
'color' => '000000B2',
'color2' => 'ffffff',
'videoplay' => '',
'videopause' => '',
'videoend' => '',
'fullwidth' => 1,
'show' => 1,
'show-progress' => 1,
'show-time' => 1,
'show-volume' => 1,
'iconsize' => 'small',
);
}
public function getFilled($slide, $data) {
$data = parent::getFilled($slide, $data);
$data->set('audio_mp3', $slide->fill($data->get('audio_mp3', '')));
return $data;
}
public function prepareExport($export, $data) {
parent::prepareExport($export, $data);
$export->addImage($data->get('audio_mp3'));
}
public function prepareImport($import, $data) {
$data = parent::prepareImport($import, $data);
$data->set('audio_mp3', $import->fixImage($data->get('audio_mp3')));
return $data;
}
public function prepareSample($data) {
$data->set('audio_mp3', ResourceTranslator::toUrl($data->get('audio_mp3')));
return $data;
}
public function loadResources($renderable) {
parent::loadResources($renderable);
$renderable->addLess(self::getAssetsPath() . "/audio.n2less", array(
"sliderid" => $renderable->elementId
));
}
public function renderFields($container) {
$settings = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-audio', n2_('General'));
new Video($settings, 'audio_mp3', n2_('MP3 audio'), '', array(
'width' => 220
));
new Color($settings, 'color', n2_('Main color'), '', array(
'alpha' => true
));
new Color($settings, 'color2', n2_('Secondary color'));
$audioSettings = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-audio-settings', n2_('Audio settings'));
new Warning($audioSettings, 'autoplay-notice', sprintf(n2_('Audio autoplaying has a lot of limitations made by browsers. You can read about them %1$shere%2$s.'), '<a href="https://smartslider.helpscoutdocs.com/article/1919-video-autoplay-handling" target="_blank">', '</a>'));
new OnOff($audioSettings, 'autoplay', n2_('Autoplay'), 0, array(
'relatedFieldsOn' => array(
'item_audioautoplay-notice'
)
));
new OnOff($audioSettings, 'loop', n2_x('Loop', 'Video/Audio play'), 0);
new Select($audioSettings, 'volume', n2_('Volume'), 1, array(
'options' => array(
'0' => n2_('Mute'),
'0.25' => '25%',
'0.5' => '50%',
'0.75' => '75%',
'1' => '100%'
)
));
new OnOff($audioSettings, 'reset', n2_('Restart on slide change'), 0, array(
'tipLabel' => n2_('Restart on slide change'),
'tipDescription' => n2_('Starts the audio from the beginning when the slide is viewed again.')
));
$display = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-audio-display', n2_('Display'));
new OnOff($display, 'fullwidth', n2_('Full width'), 0);
new OnOff($display, 'show', n2_('Controls'), 0, array(
'relatedFieldsOn' => array(
'item_audioiconsize'
)
));
new OnOff($display, 'show-progress', n2_('Progress'), 0);
new OnOff($display, 'show-time', n2_('Time'), 0);
new OnOff($display, 'show-volume', n2_('Volume'), 0);
new Select($display, 'iconsize', n2_('Icon Size'), 'small', array(
'options' => array(
'small' => 'Small',
'medium' => 'Medium',
'large' => 'Large'
)
));
}
} Renderable/Item/Audio/ItemAudioFrontend.php 0000644 00000013477 15235523313 0014655 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\Audio;
use Nextend\Framework\Parser\Color;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Renderable\AbstractRenderableOwner;
use Nextend\SmartSlider3\Renderable\Item\AbstractItemFrontend;
class ItemAudioFrontend extends AbstractItemFrontend {
public function render() {
$owner = $this->layer->getOwner();
$owner->addScript('new _N2.FrontendItemAudio(this, "' . $this->id . '", ' . $this->data->toJSON() . ');');
return $this->getHTML();
}
public function renderAdminTemplate() {
return $this->getHTML();
}
public function getHTML() {
$owner = $this->layer->getOwner();
$this->loadResources($owner);
$attributes['iconsize'] = $this->data->get('iconsize');
$attributes = array(
'class' => 'n2-ss-item-audio-bar n2-ss-item-audio-bar--' . $attributes['iconsize'] . ' n2-ow n2-ss-item-content n2-ow-all',
'id' => $this->id
);
$controls = array();
if ($this->data->get('show')) {
$attributes['data-state'] = 'paused';
$attributes['data-volume'] = '1';
$attributes['style'] = 'background-color:' . Color::colorToRGBA($this->data->get('color')) . ';';
if (!$this->data->get('fullwidth')) {
$attributes['style'] .= 'display:inline-flex;vertical-align:top;';
}
$controls[] = '<div class="n2-ss-item-audio-play"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><path fill="{color2}" d="M20 15.99c0 .41-.21.772-.52.967l-6.867 4.87c-.003 0-.006.002-.01.004l-.003.004c-.158.1-.342.156-.54.156-.585 0-1.06-.504-1.06-1.125v-9.752c0-.622.475-1.126 1.06-1.126.198 0 .382.058.54.157l.004.002.01.006 6.865 4.868c.31.196.52.556.52.97z"></path></svg></div>';
$controls[] = '<div class="n2-ss-item-audio-pause"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><path fill="{color2}" d="M17 22V10h4v12h-4zm-6-12h4v12h-4V10z"></path></svg></div>';
if ($this->data->get('show-progress')) {
$controls[] = '<div class="n2-ss-item-audio-progress-container n2_container_scrollable"><div class="n2-ss-item-audio-progress" style="background:{bar};"><div style="background:{color2};" class="n2-ss-item-audio-progress-playhead"></div></div></div>';
}
if ($this->data->get('show-time')) {
$controls[] = '<div class="n2-ss-item-audio-time" style="color:{color2};">00:00 / 00:00</div>';
}
if ($this->data->get('show-volume')) {
$controls[] = '<div class="n2-ss-item-audio-unmute"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><path fill="{color2}" d="M15 22h-1l-4-4H9c-.45 0-1-.527-1-1v-3c0-.474.55-1 1-1h1l4-4h1v13z"/></svg></div>';
$controls[] = '<div class="n2-ss-item-audio-mute"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><path fill="{color2}" d="M15 22h-1l-4-4H9c-.45 0-1-.527-1-1v-3c0-.474.55-1 1-1h1l4-4h1v13zm3.147-1.954l-.06.002c-.215 0-.423-.09-.577-.25l-.11-.116c-.286-.3-.32-.776-.078-1.117.612-.865.935-1.892.935-2.968 0-1.158-.367-2.244-1.06-3.14-.266-.342-.24-.837.055-1.148l.11-.115c.162-.172.38-.265.618-.25.23.012.446.126.592.313.963 1.236 1.472 2.737 1.472 4.34 0 1.49-.45 2.912-1.3 4.106-.143.2-.36.324-.597.342zm3.38 2.65c-.15.183-.363.293-.59.303H20.9c-.215 0-.423-.09-.577-.25l-.107-.114c-.3-.314-.32-.817-.048-1.158 1.32-1.644 2.045-3.733 2.045-5.88 0-2.236-.778-4.387-2.19-6.058-.285-.34-.27-.853.034-1.174l.107-.112c.16-.168.365-.26.603-.252.225.006.438.11.587.287C23.06 10.303 24 12.9 24 15.596c0 2.595-.878 5.116-2.474 7.1z"></path></svg></div>';
$controls[] = '<div class="n2-ss-item-audio-volume-container n2_container_scrollable"><div class="n2-ss-item-audio-volume" style="background:{bar};"><div style="background:{color2};" class="n2-ss-item-audio-volumehead"></div></div></div>';
}
} else if ($owner->isAdmin()) {
$controls[] = 'Audio';
$attributes['style'] = 'color:#' . $this->data->get('color2') . ';';
}
return Html::tag('div', $attributes, $this->getAudioHTML($owner) . str_replace(array(
'{bar}',
'{color2}'
), array(
Color::colorToRGBA($this->data->get('color2') . '33'),
'#' . $this->data->get('color2')
), implode('', $controls)));
}
/**
* @param AbstractRenderableOwner $slide
*
* @return string
*/
private function getAudioHTML($slide) {
$attributes = array();
if ($this->data->get("volume", 1) == 0) {
$attributes['muted'] = true;
}
return Html::tag("audio", $attributes, $this->setContent($slide));
}
/**
* @param AbstractRenderableOwner $slide
*
* @return string
*/
private function setContent($slide) {
$videoContent = "";
if ($this->data->get("audio_mp3", false)) {
$audioUrl = ResourceTranslator::toUrl($slide->fill($this->data->get("audio_mp3")));
$type = "audio/mpeg";
if (strpos($audioUrl, '.m4a')) {
$type = "audio/mp4";
}
$videoContent .= Html::tag("source", array(
"src" => $audioUrl,
"type" => $type
), '', false);
}
return $videoContent;
}
/**
* @param AbstractRenderableOwner $owner
*/
public function loadResources($owner) {
$owner->addLess(self::getAssetsPath() . "/audio.n2less", array(
"sliderid" => $owner->getElementID()
));
}
} Renderable/Item/Area/ItemArea.php 0000644 00000016356 15235523313 0012572 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\Area;
use Nextend\Framework\Form\Element\MarginPadding;
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\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;
class ItemArea extends AbstractItem {
protected $ordering = 100;
protected $layerProperties = array(
"desktopportraitwidth" => 150,
"desktopportraitheight" => 150
);
protected function isBuiltIn() {
return true;
}
public function getType() {
return 'area';
}
public function getTitle() {
return n2_('Area');
}
public function getIcon() {
return 'ssi_32 ssi_32--area';
}
public function getGroup() {
return n2_x('Advanced', 'Layer group');
}
public function createFrontend($id, $itemData, $layer) {
return new ItemAreaFrontend($this, $id, $itemData, $layer);
}
public function getValues() {
return parent::getValues() + array(
'width' => '',
'height' => '',
'color' => '000000ff',
'gradient' => 'off',
'color2' => '000000ff',
'css' => '',
'borderWidth' => '0|*|0|*|0|*|0',
'borderStyle' => 'solid',
'borderColor' => 'ffffff1f',
'borderRadius' => 0,
'href' => '#',
'href-target' => '_self',
'href-rel' => '',
);
}
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);
}
$borderWidthV1 = $data->get('borderWidth', 0);
if (is_numeric($borderWidthV1)) {
$data->set('borderWidth', $borderWidthV1 . '|*|' . $borderWidthV1 . '|*|' . $borderWidthV1 . '|*|' . $borderWidthV1 . '');
}
}
public function getFilled($slide, $data) {
$data = parent::getFilled($slide, $data);
$data->set('href', $slide->fill($data->get('href', '#|*|')));
return $data;
}
public function prepareExport($export, $data) {
parent::prepareExport($export, $data);
$export->addLightbox($data->get('href'));
}
public function prepareImport($import, $data) {
$data = parent::prepareImport($import, $data);
$data->set('href', $import->fixLightbox($data->get('href')));
return $data;
}
public function renderFields($container) {
$color = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-area', n2_('Color'));
new Color($color, 'color', n2_('Background color'), '00000000', array(
'alpha' => true
));
new Gradient($color, 'gradient', n2_('Gradient'), 'off', array(
'relatedFields' => array(
'item_areacolor2'
)
));
new Color($color, 'color2', n2_('Color end'), 'ffffff00', array(
'alpha' => true
));
$border = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-area-border', n2_('Border'));
$borderWidth = new MarginPadding($border, 'borderWidth', n2_('Border'), '0|*|0|*|0|*|0', array(
'unit' => 'px',
'relatedFields' => array(
'item_areaborderStyle',
'item_areaborderColor',
)
));
for ($i = 1; $i < 5; $i++) {
new NumberAutoComplete($borderWidth, 'borderWidth-' . $i, false, '', array(
'values' => array(
0,
1,
2,
3,
5
),
'min' => 0,
'wide' => 3
));
}
new Select($border, 'borderStyle', n2_('Style'), 'solid', array(
'options' => array(
'none' => n2_('None'),
'solid' => n2_('Solid'),
'dashed' => n2_('Dashed'),
'dotted' => n2_('Dotted'),
)
));
new Color($border, 'borderColor', n2_('Color'), '00000000', array(
'alpha' => true
));
new NumberAutoComplete($border, 'borderRadius', n2_('Border radius'), 0, array(
'values' => array(
0,
3,
5,
10,
99
),
'wide' => 3,
'unit' => 'px'
));
$size = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-area-size', n2_('Size'));
new Number($size, 'width', n2_('Width'), '', array(
'wide' => 4,
'unit' => 'px',
'tipLabel' => n2_('Width'),
'tipDescription' => sprintf(n2_('Fix width for the %1$s.'), $this->getTitle())
));
new Number($size, 'height', n2_('Height'), '', array(
'wide' => 4,
'unit' => 'px',
'tipLabel' => n2_('Height'),
'tipDescription' => sprintf(n2_('Fix height for the %1$s.'), $this->getTitle())
));
$link = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-area-link', n2_('Link'));
new Url($link, 'href', n2_('Link'), '', array(
'relatedFields' => array(
'item_areahref-target',
'item_areahref-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>')
));
$developer = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-area-developer', n2_('Advanced'));
new Textarea($developer, 'css', 'CSS', '', array(
'width' => 314,
'tipLabel' => 'CSS',
'tipDescription' => n2_('Write custom CSS codes here without selectors.')
));
}
} Renderable/Item/Area/ItemAreaFrontend.php 0000644 00000007463 15235523313 0014271 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\Area;
use Nextend\Framework\Parser\Color;
use Nextend\Framework\Parser\Common;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Renderable\Item\AbstractItemFrontend;
class ItemAreaFrontend extends AbstractItemFrontend {
public function render() {
if ($this->hasLink()) {
return $this->getLink($this->getHtml(false), array(
'style' => 'display: block; width:100%;height:100%;',
'class' => 'n2-ss-item-content n2-ow'
));
}
return $this->getHtml();
}
public function renderAdminTemplate() {
return $this->getHtml();
}
private function getHtml($isContent = true) {
$style = '';
$color = $this->data->get('color');
$gradient = $this->data->get('gradient', 'off');
if ($gradient != 'off') {
$colorEnd = $this->data->get('color2');
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 && substr($color, 6, 2) != '00') {
$style = 'background-color: #' . substr($color, 0, 6) . ';';
$style .= "background-color: " . Color::colorToRGBA($color) . ";";
}
}
$_width = intval($this->data->get('width'));
if ($_width > 0) {
$style .= 'width:' . $_width . 'px;';
}
$height = '100%';
$_height = intval($this->data->get('height'));
if ($_height > 0) {
$height = $_height . 'px';
}
$style .= 'height:' . $height . ';';
$borderWidths = array();
list($borderWidths[0], $borderWidths[1], $borderWidths[2], $borderWidths[3]) = (array)Common::parse($this->data->getIfEmpty('borderWidth', '0|*|0|*|0|*|0'));
$hasBorder = false;
for ($i = 0; $i < 4; $i++) {
$borderWidths[$i] = max(0, intval($borderWidths[$i]));
if ($borderWidths[$i] > 0) {
$hasBorder = true;
}
}
if ($hasBorder) {
$borderRgba = Color::colorToRGBA($this->data->get('borderColor'));
$style .= 'border-width:' . implode('px ', explode('|*|', $this->data->get('borderWidth'))) . 'px;';
$style .= 'border-style: ' . $this->data->get('borderStyle') . ';';
$style .= 'border-color: ' . $borderRgba . ';';
$style .= 'box-sizing: border-box;';
}
$borderRadius = max(0, intval($this->data->get('borderRadius')));
if ($borderRadius > 0) {
$style .= 'border-radius:' . $borderRadius . 'px;';
}
return Html::tag('div', array(
'class' => ($isContent ? 'n2-ss-item-content ' : '') . 'n2-ow',
'style' => $style . $this->data->get('css')
));
}
public function needHeight() {
return true;
}
} Renderable/Item/AnimatedHeading/ItemAnimatedHeading.php 0000644 00000023555 15235523313 0017055 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\AnimatedHeading;
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\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\Color;
use Nextend\Framework\Form\Element\Text\Number;
use Nextend\Framework\Form\Element\Text\NumberSlider;
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;
class ItemAnimatedHeading extends AbstractItem {
protected $ordering = 2;
protected $fonts = array(
'font' => array(
'defaultName' => 'item-animated-heading-font',
'value' => '{"data":[{"extra":"","color":"ffffffff","size":"36||px","tshadow":"0|*|0|*|0|*|000000ff","lineheight":"1.5","bold":0,"italic":0,"underline":0,"align":"inherit","letterspacing":"normal","wordspacing":"normal","texttransform":"none"},{},{}]}'
)
);
protected $styles = array(
'style' => array(
'defaultName' => 'item-animated-heading-style',
'value' => '{"data":[{},{"padding":"0|*|0|*|0|*|0|*|px"},{}]}'
)
);
protected function isBuiltIn() {
return true;
}
public function getType() {
return 'animatedHeading';
}
public function getTitle() {
return n2_('Animated heading');
}
public function getIcon() {
return 'ssi_32 ssi_32--animatedheading';
}
public function getGroup() {
return n2_('Special');
}
public function createFrontend($id, $itemData, $layer) {
return new ItemAnimatedHeadingFrontend($this, $id, $itemData, $layer);
}
public function getValues() {
return parent::getValues() + array(
'type' => 'slide',
'color' => 'ffffffff',
'loop' => 0,
'delay' => 0,
'speed' => 100,
'show-duration' => 1500,
'animate-width' => 1,
'priority' => 'div',
'before-text' => n2_('We are Passionate About'),
'animated-text' => n2_("Amazing Food\nGreat Hospitality"),
'href' => '#',
'href-target' => '_self',
'href-rel' => '',
'after-text' => '',
'title' => '',
'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');
$data->set('href', $link);
$data->set('href-target', $target);
$data->set('href-rel', $rel);
}
}
public function loadResources($renderable) {
parent::loadResources($renderable);
$renderable->addLess(self::getAssetsPath() . "/animatedHeading.n2less", array(
"sliderid" => $renderable->elementId
));
}
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-animated-heading-font', false, $this->fonts['font']['value'], array(
'mode' => 'hover'
));
new Style($row1, 'item-animated-heading-style', false, $this->styles['style']['value'], array(
'mode' => 'heading'
));
}
public function renderFields($container) {
$settings = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-animated-heading-text', n2_('General'));
new Text($settings, 'before-text', n2_('Before text'), '', array(
'style' => 'width: 302px;'
));
new Textarea($settings, 'animated-text', n2_('Animated text'), '', array(
'height' => 70,
'width' => 314
));
new Text($settings, 'after-text', n2_('After text'), '', array(
'style' => 'width: 302px;'
));
$link = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-animated-heading-link', n2_('Link'));
new Url($link, 'href', n2_('Link'), '', array(
'style' => 'width:236px;',
'relatedFields' => array(
'item_animatedHeadinghref-target',
'item_animatedHeadinghref-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>')
));
$animation = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-animated-heading-animation', n2_('Animation'));
new Select($animation, 'type', n2_('Type'), '', array(
'options' => array(
'fade' => n2_('Fade'),
'rotating' => n2_('Rotating'),
'drop-in' => n2_('Drop-in'),
'slide' => n2_x('Slide', 'Animation'),
'slide-down' => n2_('Slide down'),
'typewriter1' => n2_('Typewriter'),
'chars' => n2_('Chars'),
'chars2' => n2_('Chars 2')
),
'relatedValueFields' => array(
array(
'values' => array(
'fade',
'rotating',
'drop-in',
'slide',
'slide-down',
'chars',
'chars2'
),
'field' => array(
'item_animatedHeadinganimate-width'
)
),
array(
'values' => array(
'typewriter1',
),
'field' => array(
'item_animatedHeadingcolor'
)
)
)
));
new OnOff($animation, 'animate-width', n2_('Auto width'), 1);
new Color($animation, 'color', n2_('Cursor color'), '', array(
'alpha' => true
));
new OnOff($animation, 'loop', n2_x('Loop', 'Effect'), 1);
new Number($animation, 'delay', n2_('Delay'), 0, array(
'unit' => 'ms',
'wide' => 5,
'min' => 0
));
new NumberSlider($animation, 'speed', n2_('Speed'), 100, array(
'style' => 'width:35px;',
'unit' => '%',
'min' => 10,
'max' => 400,
'step' => 1,
'sliderMax' => 150
));
new Number($animation, 'show-duration', n2_('Show duration'), 1500, array(
'unit' => 'ms',
'wide' => 5,
'min' => 0
));
$dev = new Fieldset\LayerWindow\FieldsetLayerWindow($container, 'item-animated-heading-developer', n2_('Advanced'));
new Select($dev, 'priority', 'Tag', 'div', array(
'options' => array(
'div' => 'div',
'1' => 'H1',
'2' => 'H2',
'3' => 'H3',
'4' => 'H4',
'5' => 'H5',
'6' => 'H6'
)
));
new HiddenFont($settings, 'font', false, '', array(
'mode' => 'highlight'
));
new HiddenStyle($settings, 'style', false, '', array(
'mode' => 'highlight'
));
new Text($dev, 'class', n2_('CSS Class'), '', array(
'style' => 'width:226px;',
'tipLabel' => n2_('CSS Class'),
'tipDescription' => n2_('Class on the selected tag element.'),
'tipLink' => 'https://smartslider.helpscoutdocs.com/article/1812-layer-style#advanced'
));
}
} Renderable/Item/AnimatedHeading/ItemAnimatedHeadingFrontend.php 0000644 00000012051 15235523313 0020542 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Renderable\Item\AnimatedHeading;
use Nextend\Framework\Parser\Color;
use Nextend\Framework\Sanitize;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Renderable\AbstractRenderableOwner;
use Nextend\SmartSlider3\Renderable\Item\AbstractItemFrontend;
class ItemAnimatedHeadingFrontend extends AbstractItemFrontend {
public function render() {
return $this->getHtml();
}
public function renderAdminTemplate() {
return $this->getHtml();
}
private function getHtml() {
$owner = $this->layer->getOwner();
$this->loadResources($owner);
$heading = array();
$beforeText = Sanitize::filter_allowed_html($owner->fill($this->data->get('before-text', '')));
if (!empty($beforeText)) {
$heading[] = Html::tag('ss-text', array(
'class' => 'n2-ss-animated-heading-before'
), $beforeText) . ' ';
}
$animatedText = preg_split('/\r\n|\r|\n/', Sanitize::filter_allowed_html($owner->fill($this->data->get('animated-text', ''))));
if (!empty($animatedText)) {
$attributes = array(
'class' => 'n2-highlighted n2-ss-animated-heading-i'
);
$type = $this->data->get('type', 'slide');
if ($type != 'slide') {
$attributes['data-animation-type'] = $type;
}
$color = $this->data->get('color', 'ffffffff');
if ($color != 'ffffffff') {
$attributes['data-color'] = Color::colorToRGBA($color);
}
$animateWidth = $this->data->get('animate-width', '1');
if ($animateWidth != 1) {
$attributes['data-animate-width'] = $animateWidth;
}
$delay = $this->data->get('delay', 0);
if ($delay > 0) {
$attributes['data-delay'] = $delay;
}
$showDuration = max(0, $this->data->get('show-duration', 1500));
if ($showDuration != 1500) {
$attributes['data-show-duration'] = $showDuration;
}
$speed = max(0, $this->data->get('speed', 100));
if ($speed != 100) {
$attributes['data-speed'] = $speed;
}
if ($this->data->get('loop', 0)) {
$attributes['data-loop'] = 1;
}
$animatedInner = '';
foreach ($animatedText as $text) {
$text = trim($text);
if (!empty($text)) {
$animatedInner .= Html::tag('div', array(
'class' => 'n2-ss-animated-heading-i-text'
), $text);
}
}
$animatedInner = Html::tag('div', array(
'class' => 'n2-ss-animated-heading-i2'
), $animatedInner);
$href = $this->data->get('href', '');
if (!empty($href) && $href != '#') {
$heading[] = $this->getLink($animatedInner, $attributes);
} else {
$heading[] = Html::tag('ss-text', $attributes, $animatedInner);
}
}
$afterText = Sanitize::filter_allowed_html($owner->fill($this->data->get('after-text', '')));
if (!empty($afterText)) {
$heading[] = ' ' . Html::tag('ss-text', array(
'class' => 'n2-ss-animated-heading-after'
), $afterText);
}
$font = $owner->addFont($this->data->get('font'), 'highlight');
$style = $owner->addStyle($this->data->get('style'), 'highlight');
return $this->heading($this->data->get('priority', 'div'), array(
"id" => $this->id,
"class" => 'n2-ss-animated-heading-wrapper ' . $font . ' ' . $style . ' n2-ss-item-content n2-ss-text n2-ow-all'
), implode('', $heading));
}
private function heading($type, $attributes, $content) {
if (is_numeric($type) && $type > 0) {
return Html::tag("h{$type}", $attributes, $content);
}
return Html::tag("div", $attributes, $content);
}
/**
* @param AbstractRenderableOwner $owner
*/
public function loadResources($owner) {
$owner->addLess(self::getAssetsPath() . "/animatedHeading.n2less", array(
"sliderid" => $owner->getElementID()
));
if (!$owner->isScriptAdded('animated-heading')) {
if ($this->isEditor) {
$owner->addScript('this.sliderElement.querySelectorAll(\'.n2-ss-currently-edited-slide .n2-ss-animated-heading-i\').forEach((function(el){new _N2.AnimatedHeadingItemAdmin(el, this)}).bind(this));', 'animated-heading');
} else {
$owner->addScript("this.sliderElement.querySelectorAll('.n2-ss-animated-heading-i').forEach((function(el){new _N2.FrontendItemAnimatedHeading(el, this)}).bind(this));", 'animated-heading');
}
}
}
} Form/Element/AutoplayPicker.php 0000644 00000006216 15235523313 0012514 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\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\Select;
use Nextend\Framework\Form\Element\Text\Number;
use Nextend\Framework\Form\TraitFieldset;
class AutoplayPicker extends AbstractFieldHidden implements ContainerInterface {
use TraitFieldset;
private static $separator = '|*|';
protected function fetchElement() {
$this->addAutoPlayPicker();
$default = explode(self::$separator, $this->defaultValue);
$value = explode(self::$separator, $this->getValue());
$value = $value + $default;
$html = '<div class="n2_field_autoplaypicker">';
$html .= '<div class="n2_field_autoplaypicker__label"></div><i class="n2_field_autoplaypicker__arrow ssi_16 ssi_16--selectarrow"></i>';
$html .= '<div class="n2_field_autoplaypicker__popover">';
$subElements = array();
$i = 0;
$element = $this->first;
while ($element) {
$element->setExposeName(false);
if (isset($value[$i])) {
$element->setDefaultValue($value[$i]);
}
$html .= $this->decorateElement($element);
$subElements[$i] = $element->getID();
$i++;
$element = $element->getNext();
}
$html .= '</div>';
$html .= parent::fetchElement();
$html .= '</div>';
Js::addInline('new _N2.FormElementAutoPlayPicker("' . $this->fieldID . '", ' . json_encode($subElements) . ', "' . self::$separator . '");');
return $html;
}
/**
* @param AbstractField $element
*
* @return string
*/
public function decorateElement($element) {
return $this->parent->decorateElement($element);
}
protected function addAutoPlayPicker() {
new Number($this, $this->name . '-1', n2_('Interval'), '', array(
'wide' => 3,
'min' => 1
));
new Select($this, $this->name . '-2', n2_('Interval modifier'), '', array(
'options' => array(
'loop' => n2_x('loops', 'Autoplay modifier'),
'slide' => n2_x('slide count', 'Autoplay modifier'),
'slideindex' => n2_x('slide index', 'Autoplay modifier')
),
'relatedValueFields' => array(
array(
'values' => array(
'loop'
),
'field' => array(
$this->getControlName() . $this->name . '-3'
)
)
),
));
new Select($this, $this->name . '-3', n2_('Stops on'), '', array(
'options' => array(
'current' => n2_x('last slide', 'Autoplay modifier'),
'next' => n2_x('next slide', 'Autoplay modifier')
)
));
}
} Form/Element/CanvasLayerParentPicker.php 0000644 00000001126 15235523313 0014273 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Form\Element;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\Form\Element\AbstractFieldHidden;
use Nextend\Framework\View\Html;
class CanvasLayerParentPicker extends AbstractFieldHidden {
protected function fetchElement() {
Js::addInline('new _N2.FormElementLayerPicker("' . $this->fieldID . '");');
$this->renderRelatedFields();
return parent::fetchElement() . Html::tag('div', array(
'class' => 'n2_ss_absolute_parent_picker'
), '<i class="ssi_16"></i>');
}
} Form/Element/Particle.php 0000644 00000001303 15235523313 0011313 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Form\Element;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\Form\Element\AbstractChooser;
use Nextend\Framework\Request\Request;
class Particle extends AbstractChooser {
protected function addScript() {
$MVCHelper = $this->getForm();
Js::addInline('new _N2.FormElementParticleManager("' . $this->fieldID . '", ' . json_encode(array(
'editUrl' => $MVCHelper->createUrl(array(
'slider/particle',
array(
'sliderid' => Request::$GET->getInt('sliderid')
)
), true)
)) . ');');
}
} Form/Element/ParticleSkin.php 0000644 00000005427 15235523313 0012153 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Form\Element;
use Nextend\Framework\Filesystem\Filesystem;
use Nextend\Framework\Form\Element\Select\Skin;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
class ParticleSkin extends Skin {
protected $fixed = true;
public function __construct($insertAt, $name = '', $label = '', $default = '', $parameters = array()) {
parent::__construct($insertAt, $name, $label, $default, $parameters);
$labels = array(
'link' => n2_('Link'),
'polygons' => n2_('Polygons'),
'bloom' => n2_('Bloom'),
'web' => n2_('Web'),
'blackwidow' => n2_('Black widow'),
'zodiac' => n2_('Zodiac'),
'fading-dots' => n2_('Fading dots'),
'pirouette' => n2_('Pirouette'),
'sparkling' => n2_('Sparkling'),
);
$this->options = array(
'0' => array(
'label' => n2_('Disabled'),
'settings' => array()
)
);
$folder = ResourceTranslator::toPath('$ss3-pro-frontend$/js/particle/presets/');
$files = Filesystem::files($folder);
$extension = 'json';
for ($i = 0; $i < count($files); $i++) {
$pathInfo = pathinfo($files[$i]);
if (isset($pathInfo['extension']) && $pathInfo['extension'] == $extension) {
$jsProp = json_decode(Filesystem::readFile($folder . $pathInfo['filename'] . '.json'), true);
$this->options[$pathInfo['filename']] = array(
'label' => $labels[$pathInfo['filename']],
'settings' => array(
'color' => substr($jsProp['particles']["color"]["value"], 1) . str_pad(dechex(intval($jsProp['particles']["opacity"]["value"] * 255)), 2, "0", STR_PAD_LEFT),
'line-color' => substr($jsProp['particles']["line_linked"]["color"], 1) . str_pad(dechex(intval($jsProp['particles']["line_linked"]["opacity"] * 255)), 2, "0", STR_PAD_LEFT),
'hover' => $jsProp['interactivity']["events"]["onhover"]['enable'] ? $jsProp['interactivity']["events"]["onhover"]['mode'] : 0,
'click' => $jsProp['interactivity']["events"]["onclick"]['enable'] ? $jsProp['interactivity']["events"]["onclick"]['mode'] : 0,
'number' => $jsProp['particles']["number"]["value"],
'speed' => $jsProp['particles']["move"]["speed"]
)
);
}
}
$this->options['custom'] = array(
'label' => n2_('Custom'),
'settings' => array()
);
}
} Form/Element/PostBackgroundAnimation.php 0000644 00000000604 15235523313 0014340 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Form\Element;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\Form\Element\AbstractChooser;
class PostBackgroundAnimation extends AbstractChooser {
protected function addScript() {
Js::addInline('new _N2.FormElementPostAnimationManager("' . $this->fieldID . '", "postbackgroundanimationManager");');
}
} Form/Element/ShapeDivider.php 0000644 00000001321 15235523313 0012117 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Form\Element;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\Form\Element\AbstractChooser;
use Nextend\Framework\Request\Request;
class ShapeDivider extends AbstractChooser {
protected function addScript() {
$MVCHelper = $this->getForm();
Js::addInline('new _N2.FormElementShapeDividerManager("' . $this->fieldID . '", ' . json_encode(array(
'editUrl' => $MVCHelper->createUrl(array(
'slider/shapedivider',
array(
'sliderid' => Request::$GET->getInt('sliderid')
)
), true)
)) . ');');
}
} Form/Element/SplitTextAnimation.php 0000644 00000004156 15235523313 0013361 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Form\Element;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\Form\Element\AbstractChooser;
use Nextend\SmartSlider3Pro\SplitText\SplitTextManager;
class SplitTextAnimation extends AbstractChooser {
protected $relatedStyle = '';
protected $relatedFont = '';
protected $group = '';
protected $transformOrigin = '';
protected $preview = '';
protected $linkedRelatedFields = array();
protected function addScript() {
Js::addInline('new _N2.FormElementSplitTextAnimationManager("' . $this->fieldID . '", {
font: "' . $this->relatedFont . '",
style: "' . $this->relatedStyle . '",
preview: ' . json_encode($this->preview) . ',
group: "' . $this->group . '",
transformOrigin: "' . $this->transformOrigin . '",
linkedRelatedFields: ' . json_encode($this->linkedRelatedFields) . ',
});');
}
protected function fetchElement() {
SplitTextManager::enqueue($this->getForm()
->getMVCHelper());
return parent::fetchElement();
}
/**
* @param string $relatedStyle
*/
public function setRelatedStyle($relatedStyle) {
$this->relatedStyle = $relatedStyle;
}
/**
* @param string $relatedFont
*/
public function setRelatedFont($relatedFont) {
$this->relatedFont = $relatedFont;
}
/**
* @param string $group
*/
public function setGroup($group) {
$this->group = $group;
}
/**
* @param string $transformOrigin
*/
public function setTransformOrigin($transformOrigin) {
$this->transformOrigin = $transformOrigin;
}
/**
* @param string $preview
*/
public function setPreview($preview) {
$this->preview = $preview;
}
/**
* @param array $linkedRelatedFields
*/
public function setLinkedRelatedFields($linkedRelatedFields) {
$this->linkedRelatedFields = $linkedRelatedFields;
}
} Form/Element/Select/ShapeDividerSelect.php 0000644 00000007346 15235523313 0014513 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Form\Element\Select;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\View\Html;
class ShapeDividerSelect extends Select {
private static $_options;
public function __construct($insertAt, $name = '', $label = '', $default = '', array $parameters = array()) {
if (self::$_options === null) {
self::$_options = array(
'simple-Arrow' => n2_('Arrow'),
'simple-Curve1' => sprintf(n2_('Curve %d'), '1'),
'simple-Curve2' => sprintf(n2_('Curve %d'), '2'),
'simple-Curve3' => sprintf(n2_('Curve %d'), '3'),
'simple-Curve4' => sprintf(n2_('Curve %d'), '4'),
'simple-Curves' => n2_('Curves'),
'simple-Fan1' => sprintf(n2_('Fan %d'), '1'),
'simple-Fan2' => sprintf(n2_('Fan %d'), '2'),
'simple-Fan3' => sprintf(n2_('Fan %d'), '3'),
'simple-Fan4' => sprintf(n2_('Fan %d'), '4'),
'simple-Hills' => n2_('Hills'),
'simple-Incline1' => sprintf(n2_('Incline %d'), '1'),
'simple-Incline2' => sprintf(n2_('Incline %d'), '2'),
'simple-Incline3' => sprintf(n2_('Incline %d'), '3'),
'simple-InverseArrow' => n2_('Inverse arrow'),
'simple-Rectangle' => n2_('Rectangle'),
'simple-Slopes' => n2_('Slopes'),
'simple-Tilt1' => sprintf(n2_('Tilt %d'), '1'),
'simple-Tilt2' => sprintf(n2_('Tilt %d'), '2'),
'simple-Triangle1' => sprintf(n2_('Triangle %d'), '1'),
'simple-Triangle2' => sprintf(n2_('Triangle %d'), '2'),
'simple-Wave1' => sprintf(n2_('Wave %d'), '1'),
'simple-Wave2' => sprintf(n2_('Wave %d'), '2'),
'simple-Waves' => n2_('Waves'),
'simple-Columns1' => sprintf(n2_('Columns %d'), '1'),
'simple-Columns2' => sprintf(n2_('Columns %d'), '2'),
'simple-Paper1' => sprintf(n2_('Paper %d'), '1'),
'simple-Paper2' => sprintf(n2_('Paper %d'), '2'),
'simple-Paper3' => sprintf(n2_('Paper %d'), '3'),
'simple-Paper4' => sprintf(n2_('Paper %d'), '4'),
'bicolor' => array(
'label' => n2_('2 Colors'),
'options' => array(
'bi-Fan' => n2_('Fan'),
'bi-MaskedWaves' => n2_('Masked waves'),
'bi-Ribbon' => n2_('Ribbon'),
'bi-Waves' => n2_('Waves')
)
)
);
}
parent::__construct($insertAt, $name, $label, $default, $parameters);
}
protected function renderOptions($options) {
$html = '<option value="0" ' . $this->isSelected('0') . '>' . n2_('Disabled') . '</option>';
$html .= $this->renderOptionsRecursive(self::$_options);
return $html;
}
private function renderOptionsRecursive($options) {
$html = '';
foreach ($options as $value => $option) {
if (is_array($option)) {
$html .= Html::tag('optgroup', array('label' => $option['label']), $this->renderOptionsRecursive($option['options']));
} else {
$html .= '<option value="' . $value . '" ' . $this->isSelected($value) . '>' . $option . '</option>';
}
}
return $html;
}
} Widget/WidgetLoader.php 0000644 00000026350 15235523313 0011062 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Widget;
use Nextend\Framework\Plugin;
use Nextend\SmartSlider3\Widget\Arrow\ArrowImage\ArrowImage;
use Nextend\SmartSlider3\Widget\Autoplay\AutoplayImage\AutoplayImage;
use Nextend\SmartSlider3\Widget\Bullet\BulletTransition\BulletTransition;
use Nextend\SmartSlider3\Widget\Group\AbstractWidgetGroup;
use Nextend\SmartSlider3\Widget\Thumbnail\Basic\ThumbnailBasic;
use Nextend\SmartSlider3Pro\Widget\Arrow\ArrowGrow\ArrowGrow;
use Nextend\SmartSlider3Pro\Widget\Arrow\ArrowImageBar\ArrowImageBar;
use Nextend\SmartSlider3Pro\Widget\Arrow\ArrowReveal\ArrowReveal;
use Nextend\SmartSlider3Pro\Widget\Arrow\ArrowText\ArrowText;
use Nextend\SmartSlider3Pro\Widget\Bar\BarVertical\BarVertical;
use Nextend\SmartSlider3Pro\Widget\Bullet\BulletNumbers\BulletNumbers;
use Nextend\SmartSlider3Pro\Widget\Bullet\BulletText\BulletText;
use Nextend\SmartSlider3Pro\Widget\FullScreen\FullScreenImage\FullScreenImage;
use Nextend\SmartSlider3Pro\Widget\Group\FullScreen;
use Nextend\SmartSlider3Pro\Widget\Group\Html;
use Nextend\SmartSlider3Pro\Widget\Group\Indicator;
use Nextend\SmartSlider3Pro\Widget\Html\HtmlCode\HtmlCode;
use Nextend\SmartSlider3Pro\Widget\Indicator\IndicatorPie\IndicatorPie;
use Nextend\SmartSlider3Pro\Widget\Indicator\IndicatorStripe\IndicatorStripe;
class WidgetLoader {
public function __construct() {
Plugin::addAction('PluggableFactorySliderWidgetGroup', array(
$this,
'sliderWidgetGroup'
));
Plugin::addAction('PluggableFactorySliderWidgetArrow', array(
$this,
'sliderWidgetArrow'
));
Plugin::addAction('PluggableFactorySliderWidgetBullet', array(
$this,
'sliderWidgetBullet'
));
Plugin::addAction('PluggableFactorySliderWidgetAutoplay', array(
$this,
'sliderWidgetAutoplay'
));
Plugin::addAction('PluggableFactorySliderWidgetBar', array(
$this,
'sliderWidgetBar'
));
Plugin::addAction('PluggableFactorySliderWidgetIndicator', array(
$this,
'sliderWidgetIndicator'
));
Plugin::addAction('PluggableFactorySliderWidgetHtml', array(
$this,
'sliderWidgetHtml'
));
Plugin::addAction('PluggableFactorySliderWidgetFullScreen', array(
$this,
'sliderWidgetFullScreen'
));
Plugin::addAction('PluggableFactorySliderWidgetThumbnail', array(
$this,
'sliderWidgetThumbnail'
));
}
public function sliderWidgetGroup() {
new FullScreen();
new Indicator();
new Html();
}
/**
* @param AbstractWidgetGroup $group
*/
public function sliderWidgetArrow($group) {
new ArrowImage($group, 'image');
new ArrowImage($group, 'imageBigRectangle', array(
'widget-arrow-style' => '{"data":[{"backgroundcolor":"000000ab","padding":"20|*|20|*|20|*|20|*|px","boxshadow":"0|*|0|*|0|*|0|*|000000ff","border":"0|*|solid|*|000000ff","borderradius":"0","extra":""},{"backgroundcolor":"5F39C2FF"}]}',
'widget-arrow-animation' => 'horizontal',
'widget-arrow-previous-position-offset' => 0,
'widget-arrow-next-position-offset' => 0,
));
new ArrowImage($group, 'imageVertical', array(
'widget-arrow-previous' => '$ss$/plugins/widgetarrow/image/image/previous/simple-vertical.svg',
'widget-arrow-next' => '$ss$/plugins/widgetarrow/image/image/next/simple-vertical.svg',
'widget-arrow-style' => '{"data":[{"backgroundcolor":"000000ab","padding":"10|*|10|*|10|*|10|*|px","boxshadow":"0|*|0|*|0|*|0|*|000000ff","border":"0|*|solid|*|000000ff","borderradius":"3","extra":""},{"backgroundcolor":"04C018FF"}]}',
'widget-arrow-previous-position-area' => 3,
'widget-arrow-next-position-area' => 10,
));
new ArrowGrow($group, 'grow');
new ArrowImageBar($group, 'imagebar');
new ArrowReveal($group, 'reveal');
new ArrowText($group, 'text');
}
/**
* @param AbstractWidgetGroup $group
*/
public function sliderWidgetAutoplay($group) {
new AutoplayImage($group, 'imageBlue', array(
'widget-autoplay-position-area' => 11,
'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":"04C018FF"}]}'
));
}
/**
* @param AbstractWidgetGroup $group
*/
public function sliderWidgetHtml($group) {
new HtmlCode($group, 'html');
}
/**
* @param AbstractWidgetGroup $group
*/
public function sliderWidgetFullScreen($group) {
new FullScreenImage($group, 'image');
new FullScreenImage($group, 'imageBlue', array(
'widget-fullscreen-tonormal' => '$ss$/plugins/widgetfullscreen/image/image/tonormal/full2.svg',
'widget-fullscreen-tofull' => '$ss$/plugins/widgetfullscreen/image/image/tofull/full2.svg',
'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":"04C018FF"}]}'
));
}
/**
* @param AbstractWidgetGroup $group
*/
public function sliderWidgetBullet($group) {
new BulletTransition($group, 'transitionBorder', array(
'widget-bullet-style' => '{"data":[{"backgroundcolor":"00000000","padding":"5|*|5|*|5|*|5|*|px","boxshadow":"0|*|0|*|0|*|0|*|000000ff","border":"2|*|solid|*|000000c2","borderradius":"50","extra":"margin: 4px;"},{"backgroundcolor":"000000ba","border":"2|*|solid|*|ffffff00"}]}'
));
new BulletTransition($group, 'transitionRectangle', array(
'widget-bullet-style' => '{"data":[{"backgroundcolor":"000000ab","padding":"8|*|8|*|8|*|8|*|px","boxshadow":"0|*|0|*|0|*|0|*|000000ff","border":"0|*|solid|*|000000ff","borderradius":"0","extra":"margin: 4px;"},{"backgroundcolor":"04C018FF"}]}'
));
new BulletTransition($group, 'transitionBar', array(
'widget-bullet-style' => '{"data":[{"backgroundcolor":"00000000","padding":"5|*|5|*|5|*|5|*|px","boxshadow":"0|*|0|*|0|*|0|*|000000ff","border":"2|*|solid|*|000000c2","borderradius":"50","extra":"margin: 4px 3px;"},{"backgroundcolor":"000000ba","border":"2|*|solid|*|ffffff00"}]}',
'widget-bullet-bar' => '{"data":[{"backgroundcolor":"ffffff80","padding":"2|*|5|*|2|*|5|*|px","boxshadow":"0|*|1|*|5|*|0|*|00000033","border":"0|*|solid|*|000000ff","borderradius":"50","extra":""}]}',
));
new BulletNumbers($group, 'numbers');
new BulletText($group, 'text');
}
/**
* @param AbstractWidgetGroup $group
*/
public function sliderWidgetIndicator($group) {
new IndicatorPie($group, 'pie');
new IndicatorPie($group, 'pieFull', array(
'widget-indicator-thickness' => 100,
'widget-indicator-track' => 'ffffff00',
'widget-indicator-bar' => 'ffffff80',
));
new IndicatorStripe($group, 'stripe');
}
/**
* @param AbstractWidgetGroup $group
*/
public function sliderWidgetBar($group) {
new BarVertical($group, 'vertical');
}
/**
* @param AbstractWidgetGroup $group
*/
public function sliderWidgetThumbnail($group) {
new ThumbnailBasic($group, 'defaultHorizontal', array(
'widget-thumbnail-style-bar' => '{"data":[{"backgroundcolor":"242424ff","padding":"0|*|0|*|0|*|0|*|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":"transition: all 0.4s;\nbackground-size: cover;"},{"border":"0|*|solid|*|ffffffcc","opacity":"100","extra":""}]}',
'widget-thumbnail-title-style' => '{"data":[{"backgroundcolor":"00000000","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' => 1,
'widget-thumbnail-title-font' => '{"data":[{"color":"ffffffff","size":"14||px","tshadow":"0|*|0|*|0|*|000000ab","afont":"Montserrat","lineheight":"1.4","bold":0,"italic":0,"underline":0,"align":"left"},{"color":"fc2828ff","afont":"Raleway,Arial","size":"25||px"},{}]}',
'widget-thumbnail-description' => 1,
'widget-thumbnail-caption-placement' => 'after'
));
new ThumbnailBasic($group, 'defaultHorizontalGallery', array(
'widget-thumbnail-title' => 0,
'widget-thumbnail-group' => 2
));
new ThumbnailBasic($group, 'defaultVertical', array(
'widget-thumbnail-position-area' => 5,
'widget-thumbnail-title' => 1,
));
new ThumbnailBasic($group, 'defaultVerticalText', array(
'widget-thumbnail-position-area' => 5,
'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":"60","extra":"background-size: cover;\nmargin: 10px 0;\n"},{"backgroundcolor":"00000000","opacity":"100","extra":"background-size: cover;\nmargin: 10px 0;\n"}]}',
'widget-thumbnail-title-style' => '{"data":[{"backgroundcolor":"00000000","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' => 1,
'widget-thumbnail-title-font' => '{"data":[{"color":"ffffffe6","size":"14||px","tshadow":"0|*|0|*|0|*|000000ab","afont":"Montserrat","lineheight":"1.8","bold":0,"italic":0,"underline":0,"align":"left","extra":""},{"color":"fc2828ff","afont":"Raleway,Arial","size":"25||px"},{}]}',
'widget-thumbnail-description' => 1,
'widget-thumbnail-description-font' => '{"data":[{"color":"ffffff7d","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-size' => 200,
'widget-thumbnail-show-image' => 0,
'widget-thumbnail-width' => 100,
'widget-thumbnail-height' => 60,
'widget-thumbnail-caption-placement' => 'after'
));
}
} Widget/Html/HtmlCode/HtmlCode.php 0000644 00000001572 15235523313 0012611 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Widget\Html\HtmlCode;
use Nextend\Framework\Form\Element\Textarea;
use Nextend\Framework\Form\Fieldset\FieldsetRow;
use Nextend\SmartSlider3\Form\Element\Group\WidgetPosition;
use Nextend\SmartSlider3\Widget\AbstractWidget;
class HtmlCode extends AbstractWidget {
protected $key = 'widget-html-';
protected $defaults = array(
'widget-html-position-mode' => 'simple',
'widget-html-position-area' => 2,
'widget-html-code' => '',
);
public function renderFields($container) {
$row1 = new FieldsetRow($container, 'widget-html-row-1');
new WidgetPosition($row1, 'widget-html-position', n2_('Position'));
new Textarea($row1, 'widget-html-code', 'HTML', '', array(
'height' => 300,
'width' => 600
));
}
} Widget/Html/HtmlCode/HtmlCodeFrontend.php 0000644 00000002054 15235523313 0014305 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Widget\Html\HtmlCode;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Widget\AbstractWidgetFrontend;
class HtmlCodeFrontend 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;
$params = $this->params;
$slider->features->addInitCallback("new _N2.SmartSliderWidget(this, 'html', '.n2-widget-html');");
$slider->sliderType->addJSDependency('SmartSliderWidget');
$displayAttributes = $this->getDisplayAttributes($params, $this->key, 1);
return Html::tag('div', Html::mergeAttributes($attributes, $displayAttributes, array(
"class" => "n2-widget-html"
)), $params->get($this->key . 'code'));
}
} Widget/FullScreen/FullScreenImage/FullScreenImage.php 0000644 00000012072 15235523313 0016560 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Widget\FullScreen\FullScreenImage;
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\AbstractWidget;
class FullScreenImage extends AbstractWidget {
protected $key = 'widget-fullscreen-';
protected $defaults = array(
'widget-fullscreen-desktop-image-width' => 16,
'widget-fullscreen-tablet-image-width' => 16,
'widget-fullscreen-mobile-image-width' => 8,
'widget-fullscreen-tonormal-image' => '',
'widget-fullscreen-tonormal-color' => 'ffffffcc',
'widget-fullscreen-tonormal' => '$ss$/plugins/widgetfullscreen/image/image/tonormal/full1.svg',
'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-offset' => 15,
'widget-fullscreen-mirror' => 1,
'widget-fullscreen-tofull-image' => '',
'widget-fullscreen-tofull-color' => 'ffffffcc',
'widget-fullscreen-tofull' => '$ss$/plugins/widgetfullscreen/image/image/tofull/full1.svg'
);
public function renderFields($container) {
$rowIcon = new FieldsetRow($container, 'widget-bullet-transition-row-icon');
$fieldToNormal = new ImageListFromFolder($rowIcon, 'widget-fullscreen-tonormal', n2_('To normal'), '', array(
'folder' => self::getAssetsPath() . '/tonormal/'
));
new FieldImage($fieldToNormal, 'widget-fullscreen-tonormal-image', n2_('Custom'), '', array(
'relatedFieldsOff' => array(
'sliderwidget-fullscreen-tonormal-color'
)
));
new Color($rowIcon, 'widget-fullscreen-tonormal-color', n2_('Color'), '', array(
'alpha' => true
));
new OnOff($rowIcon, 'widget-fullscreen-mirror', n2_('Mirror'), '', array(
'relatedFieldsOff' => array(
'sliderwidget-fullscreen-tofull',
'sliderwidget-fullscreen-tofull-color'
)
));
$fieldToFull = new ImageListFromFolder($rowIcon, 'widget-fullscreen-tofull', n2_('To fullscreen'), '', array(
'folder' => self::getAssetsPath() . '/tofull/'
));
new FieldImage($fieldToFull, 'widget-fullscreen-tofull-image', n2_('Custom'), '', array(
'relatedFieldsOff' => array(
'sliderwidget-fullscreen-tofull-color-grouping'
)
));
$groupingPauseColor = new Grouping($rowIcon, 'widget-fullscreen-tofull-color-grouping');
new Color($groupingPauseColor, 'widget-fullscreen-tofull-color', n2_('Color'), '', array(
'alpha' => true
));
$row3 = new FieldsetRow($container, 'widget-fullscreen-image-row-3');
new Style($row3, 'widget-fullscreen-style', n2_('Fullscreen'), '', array(
'mode' => 'button',
'preview' => 'SmartSliderAdminWidgetFullScreenImage'
));
new WidgetPosition($row3, 'widget-fullscreen-position', n2_('Position'));
$row4 = new FieldsetRow($container, 'widget-fullscreen-image-row-4');
new Number($row4, 'widget-fullscreen-desktop-image-width', n2_('Image width - Desktop'), '', array(
'wide' => 4,
'unit' => 'px'
));
new Number($row4, 'widget-fullscreen-tablet-image-width', n2_('Image width - Tablet'), '', array(
'wide' => 4,
'unit' => 'px'
));
new Number($row4, 'widget-fullscreen-mobile-image-width', n2_('Image width - Mobile'), '', array(
'wide' => 4,
'unit' => 'px'
));
}
public function prepareExport($export, $params) {
$export->addImage($params->get($this->key . 'tonormal-image', ''));
$export->addImage($params->get($this->key . 'tofull-image', ''));
$export->addVisual($params->get($this->key . 'style'));
}
public function prepareImport($import, $params) {
$params->set($this->key . 'tonormal-image', $import->fixImage($params->get($this->key . 'tonormal-image', '')));
$params->set($this->key . 'tofull-image', $import->fixImage($params->get($this->key . 'tofull-image', '')));
$params->set($this->key . 'style', $import->fixSection($params->get($this->key . 'style', '')));
}
} Widget/FullScreen/FullScreenImage/FullScreenImageFrontend.php 0000644 00000015226 15235523313 0020264 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Widget\FullScreen\FullScreenImage;
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 FullScreenImageFrontend 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;
$html = '';
$sizeAttributes = array();
$toNormalImage = $params->get($this->key . 'tonormal-image');
$toNormalValue = $params->get($this->key . 'tonormal');
$toNormalColor = $params->get($this->key . 'tonormal-color');
if (empty($toNormalImage)) {
if ($toNormalValue == -1) {
$toNormal = null;
} else {
$toNormal = ResourceTranslator::pathToResource(self::getAssetsPath() . '/tonormal/' . basename($toNormalValue));
}
} else {
$toNormal = $toNormalImage;
}
if ($params->get($this->key . 'mirror')) {
$toFullColor = $toNormalColor;
if (!empty($toNormalImage)) {
$toFull = $toNormalImage;
} else {
$toFull = ResourceTranslator::pathToResource(self::getAssetsPath() . '/tofull/' . basename($toNormalValue));
}
} else {
$toFull = $params->get($this->key . 'tofull-image');
$toFullColor = $params->get($this->key . 'tofull-color');
if (empty($toFull)) {
$toFullValue = $params->get($this->key . 'tofull');
if ($toFull == -1) {
$toFull = null;
} else {
$toFull = ResourceTranslator::pathToResource(self::getAssetsPath() . '/tofull/' . basename($toFullValue));
}
}
}
if ($toNormal && $toFull) {
$desktopWidth = $params->get('widget-fullscreen-desktop-image-width');
$tabletWidth = $params->get('widget-fullscreen-tablet-image-width');
$mobileWidth = $params->get('widget-fullscreen-mobile-image-width');
$slider->addDeviceCSS('all', '#' . $id . ' .n2-full-screen-widget img{width: ' . $desktopWidth . 'px}');
if ($tabletWidth != $desktopWidth) {
$slider->addDeviceCSS('tabletportrait', 'div#' . $id . ' .n2-full-screen-widget img{width: ' . $tabletWidth . 'px}');
$slider->addDeviceCSS('tabletlandscape', 'div#' . $id . ' .n2-full-screen-widget img{width: ' . $tabletWidth . 'px}');
}
if ($mobileWidth != $desktopWidth) {
$slider->addDeviceCSS('mobileportrait', 'div#' . $id . ' .n2-full-screen-widget img{width: ' . $mobileWidth . 'px}');
$slider->addDeviceCSS('mobilelandscape', 'div#' . $id . ' .n2-full-screen-widget img{width: ' . $mobileWidth . 'px}');
}
FastImageSize::initAttributes($toNormal, $sizeAttributes);
$ext = pathinfo($toNormal, PATHINFO_EXTENSION);
if ($ext == 'svg' && ResourceTranslator::isResource($toNormal)) {
list($color, $opacity) = Color::colorToSVG($toNormalColor);
$toNormal = 'data:image/svg+xml;base64,' . Base64::encode(str_replace(array(
'fill="#FFF"',
'opacity="1"'
), array(
'fill="#' . $color . '"',
'opacity="' . $opacity . '"'
), Filesystem::readFile(ResourceTranslator::toPath($toNormal))));
} else {
$toNormal = ResourceTranslator::toUrl($toNormal);
}
$ext = pathinfo($toFull, PATHINFO_EXTENSION);
if ($ext == 'svg' && ResourceTranslator::isResource($toFull)) {
list($color, $opacity) = Color::colorToSVG($toFullColor);
$toFull = 'data:image/svg+xml;base64,' . Base64::encode(str_replace(array(
'fill="#FFF"',
'opacity="1"'
), array(
'fill="#' . $color . '"',
'opacity="' . $opacity . '"'
), Filesystem::readFile(ResourceTranslator::toPath($toFull))));
} else {
$toFull = ResourceTranslator::toUrl($toFull);
}
$slider->addLess(self::getAssetsPath() . '/style.n2less', array(
"sliderid" => $slider->elementId
));
Js::addStaticGroup(self::getAssetsPath() . '/dist/w-fullscreen.min.js', 'w-fullscreen');
$displayAttributes = $this->getDisplayAttributes($params, $this->key);
$styleClass = $slider->addStyle($params->get($this->key . 'style'), 'heading');
$slider->features->addInitCallback('new _N2.SmartSliderWidgetFullScreenImage(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('SmartSliderWidgetFullScreenImage');
$html = Html::tag('div', Html::mergeAttributes($attributes, $displayAttributes, array(
'class' => $styleClass . 'n2-full-screen-widget n2-ow-all n2-full-screen-widget-image nextend-fullscreen'
)), Html::image($toNormal, n2_('Exit full screen'), $sizeAttributes + Html::addExcludeLazyLoadAttributes(array(
'class' => 'n2-full-screen-widget-to-normal',
'role' => 'button',
'tabindex' => '0'
))) . Html::image($toFull, n2_('Enter Full screen'), $sizeAttributes + Html::addExcludeLazyLoadAttributes(array(
'class' => 'n2-full-screen-widget-to-full',
'role' => 'button',
'tabindex' => '0'
))));
}
return $html;
}
} Widget/Bullet/BulletNumbers/BulletNumbers.php 0000644 00000011165 15235523313 0015303 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Widget\Bullet\BulletNumbers;
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\Fieldset\FieldsetRow;
use Nextend\SmartSlider3\Form\Element\Group\WidgetPosition;
use Nextend\SmartSlider3\Widget\Bullet\AbstractBullet;
class BulletNumbers extends AbstractBullet {
protected $defaults = array(
'widget-bullet-position-mode' => 'simple',
'widget-bullet-position-area' => 10,
'widget-bullet-position-offset' => 5,
'widget-bullet-action' => 'click',
'widget-bullet-style' => '{"data":[{"backgroundcolor":"000000ab","padding":"5|*|9|*|5|*|9|*|px","boxshadow":"0|*|0|*|0|*|0|*|000000ff","border":"0|*|solid|*|000000ff","borderradius":"0","extra":"min-width: 10px;\nmargin: 4px;"},{"backgroundcolor":"5F39C2FF","padding":"5|*|9|*|5|*|9|*|px"}]}',
'widget-bullet-font' => '{"data":[{"color":"ffffffff","size":"14||px","tshadow":"0|*|0|*|0|*|000000ff","afont":"Montserrat","lineheight":"1.2","bold":0,"italic":0,"underline":0,"align":"center","extra":""},{"color":"ffffffff"}]}',
'widget-bullet-bar' => '',
'widget-bullet-align' => 'center',
'widget-bullet-orientation' => 'auto',
'widget-bullet-bar-full-size' => 0,
'widget-bullet-overlay' => 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-number-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-number-row-2');
new Style($row2, 'widget-bullet-style', n2_('Dot'), '', array(
'mode' => 'dot',
'font' => 'sliderwidget-bullet-font',
'style2' => 'sliderwidget-bullet-bar',
'preview' => 'SmartSliderAdminWidgetBulletNumbers'
));
new Font($row2, 'widget-bullet-font', n2_('Text'), '', array(
'mode' => 'dot',
'style' => 'sliderwidget-bullet-style',
'style2' => 'sliderwidget-bullet-bar',
'preview' => 'SmartSliderAdminWidgetBulletNumbers'
));
new Style($row2, 'widget-bullet-bar', n2_('Bar'), '', array(
'mode' => 'simple',
'font' => 'sliderwidget-bullet-font',
'style2' => 'sliderwidget-bullet-style',
'preview' => 'SmartSliderAdminWidgetBulletNumbers'
));
new OnOff($row2, 'widget-bullet-bar-full-size', n2_('Bar full size'), '');
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')
)
));
new OnOff($row2, 'widget-bullet-overlay', n2_('Overlay'), '');
}
public function prepareExport($export, $params) {
$export->addVisual($params->get($this->key . 'style'));
$export->addVisual($params->get($this->key . 'bar'));
$export->addVisual($params->get($this->key . 'font'));
}
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')));
$params->set($this->key . 'font', $import->fixSection($params->get($this->key . 'font')));
}
} Widget/Bullet/BulletNumbers/BulletNumbersFrontend.php 0000644 00000007012 15235523313 0016777 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Widget\Bullet\BulletNumbers;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Widget\Bullet\AbstractBulletFrontend;
class BulletNumbersFrontend 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');
$bulletFont = $slider->addFont($params->get($this->key . 'font'), 'dot');
$orientation = $this->getOrientationByPosition($params->get($this->key . 'position-mode'), $params->get($this->key . 'position-area'), $params->get($this->key . 'orientation'), 'horizontal');
$parameters = array(
'overlay' => ($params->get($this->key . 'position-mode') || $params->get($this->key . 'overlay')) ? 1 : 0,
'area' => intval($params->get($this->key . 'position-area')),
'dotClasses' => $bulletStyle . $bulletFont,
'mode' => 'numeric',
'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', 'before');
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 . $bulletFont . '" style="visibility:hidden;"> </div>'));
}
} Widget/Bullet/BulletText/BulletText.php 0000644 00000011064 15235523313 0014123 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Widget\Bullet\BulletText;
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\Fieldset\FieldsetRow;
use Nextend\SmartSlider3\Form\Element\Group\WidgetPosition;
use Nextend\SmartSlider3\Widget\Bullet\AbstractBullet;
class BulletText extends AbstractBullet {
protected $defaults = array(
'widget-bullet-position-mode' => 'simple',
'widget-bullet-position-area' => 10,
'widget-bullet-position-offset' => 5,
'widget-bullet-action' => 'click',
'widget-bullet-style' => '{"data":[{"backgroundcolor":"000000ab","padding":"5|*|15|*|5|*|15|*|px","boxshadow":"0|*|0|*|0|*|0|*|000000ff","border":"0|*|solid|*|000000ff","borderradius":"30","extra":"margin: 4px;"},{"backgroundcolor":"04C018FF"}]}',
'widget-bullet-font' => '{"data":[{"color":"ffffffff","size":"12||px","tshadow":"0|*|0|*|0|*|000000ff","afont":"Montserrat","lineheight":"1.3","bold":0,"italic":0,"underline":0,"align":"left","extra":""},{"color":"ffffffff"}]}',
'widget-bullet-bar' => '',
'widget-bullet-align' => 'center',
'widget-bullet-orientation' => 'auto',
'widget-bullet-bar-full-size' => 0,
'widget-bullet-overlay' => 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-text-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-text-row-2');
new Style($row2, 'widget-bullet-style', n2_('Dot'), '', array(
'mode' => 'dot',
'font' => 'sliderwidget-bullet-font',
'style2' => 'sliderwidget-bullet-bar',
'preview' => 'SmartSliderAdminWidgetBulletText'
));
new Font($row2, 'widget-bullet-font', n2_('Text'), '', array(
'mode' => 'dot',
'style' => 'sliderwidget-bullet-style',
'style2' => 'sliderwidget-bullet-bar',
'preview' => 'SmartSliderAdminWidgetBulletText'
));
new Style($row2, 'widget-bullet-bar', n2_('Bar'), '', array(
'mode' => 'simple',
'font' => 'sliderwidget-bullet-font',
'style2' => 'sliderwidget-bullet-style',
'preview' => 'SmartSliderAdminWidgetBulletText'
));
new OnOff($row2, 'widget-bullet-bar-full-size', n2_('Bar full size'), '');
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')
)
));
new OnOff($row2, 'widget-bullet-overlay', n2_('Overlay'), '');
}
public function prepareExport($export, $params) {
$export->addVisual($params->get($this->key . 'style'));
$export->addVisual($params->get($this->key . 'bar'));
$export->addVisual($params->get($this->key . 'font'));
}
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')));
$params->set($this->key . 'font', $import->fixSection($params->get($this->key . 'font')));
}
} Widget/Bullet/BulletText/BulletTextFrontend.php 0000644 00000007046 15235523313 0015630 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Widget\Bullet\BulletText;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Widget\Bullet\AbstractBulletFrontend;
class BulletTextFrontend 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');
$bulletFont = $slider->addFont($params->get($this->key . 'font'), 'dot');
$orientation = $this->getOrientationByPosition($params->get($this->key . 'position-mode'), $params->get($this->key . 'position-area'), $params->get($this->key . 'orientation'), 'horizontal');
$parameters = array(
'overlay' => ($params->get($this->key . 'position-mode') != 'simple' || $params->get($this->key . 'overlay') || $orientation == 'vertical') ? 1 : 0,
'area' => intval($params->get($this->key . 'position-area')),
'dotClasses' => $bulletStyle . $bulletFont,
'mode' => 'title',
'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 . $bulletFont . '" style="visibility:hidden;"> </div>'));
}
} Widget/Bar/BarVertical/BarVertical.php 0000644 00000006763 15235523313 0013616 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Widget\Bar\BarVertical;
use Nextend\Framework\Form\Element\Font;
use Nextend\Framework\Form\Element\OnOff;
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 BarVertical extends AbstractWidgetBar {
protected $defaults = array(
'widget-bar-position-mode' => 'simple',
'widget-bar-position-area' => 6,
'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-font-title' => '{"data":[{"color":"ffffffff","size":"16||px","tshadow":"0|*|0|*|0|*|000000c7","afont":"Montserrat","lineheight":"1.3","bold":0,"italic":0,"underline":0,"align":"left"},{"color":"fc2828ff","afont":"Raleway,Arial","size":"25||px"},{}]}',
'widget-bar-font-description' => '{"data":[{"color":"ffffffff","size":"12||px","tshadow":"0|*|0|*|0|*|000000c7","afont":"Montserrat","lineheight":"1.6","bold":0,"italic":0,"underline":0,"align":"left","extra":"margin-top:10px;"},{"color":"fc2828ff","afont":"Raleway,Arial","size":"25||px"},{}]}',
'widget-bar-width' => '200px',
'widget-bar-height' => '100%',
'widget-bar-animate' => 0
);
public function renderFields($container) {
$row1 = new FieldsetRow($container, 'widget-bar-vertical-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' => 'SmartSliderAdminWidgetBarVertical'
));
new Font($row1, 'widget-bar-font-title', n2_('Title'), '', array(
'mode' => 'simple',
'style' => 'sliderwidget-bar-style',
'preview' => 'SmartSliderAdminWidgetBarVertical'
));
new Font($row1, 'widget-bar-font-description', n2_('Description'), '', array(
'mode' => 'simple',
'style' => 'sliderwidget-bar-style',
'preview' => 'SmartSliderAdminWidgetBarVertical'
));
$row2 = new FieldsetRow($container, 'widget-bar-vertical-row-2');
new Text($row2, 'widget-bar-width', n2_('Width'));
new Text($row2, 'widget-bar-height', n2_('Height'), '');
}
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', '')));
}
} Widget/Bar/BarVertical/BarVerticalFrontend.php 0000644 00000006271 15235523313 0015310 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Widget\Bar\BarVertical;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Widget\AbstractWidgetFrontend;
class BarVerticalFrontend extends AbstractWidgetFrontend {
public function __construct($sliderWidget, $widget, $params) {
parent::__construct($sliderWidget, $widget, $params);
$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-vertical.min.js', 'w-bar-vertical');
$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', 'left') . ';';
$width = $params->get($this->key . 'width');
if (is_numeric($width) || substr($width, -1) == '%' || substr($width, -2) == 'px') {
$style .= 'width:' . $width . ';';
if (substr($width, -1) == '%') {
$attributes['data-width-percent'] = substr($width, 0, -1);
}
}
$height = $params->get($this->key . 'height');
if (is_numeric($height) || substr($height, -1) == '%' || substr($height, -2) == 'px') {
$style .= 'height:' . $height . ';';
if (substr($height, -1) == '%') {
$attributes['data-height-percent'] = substr($height, 0, -1);
}
}
$parameters = array(
'area' => intval($params->get($this->key . 'position-area')),
'animate' => intval($params->get($this->key . 'animate')),
'fontTitle' => $fontTitle,
'fontDescription' => $fontDescription
);
$slider->features->addInitCallback('new _N2.SmartSliderWidgetBarVertical(this, ' . json_encode($parameters) . ');');
$slider->sliderType->addJSDependency('SmartSliderWidgetBarVertical');
return Html::tag("div", Html::mergeAttributes($attributes, $displayAttributes, array(
"class" => "nextend-bar nextend-bar-vertical n2-ss-widget-hidden n2-ow-all",
"style" => $style
)), Html::tag("div", array(
"class" => $styleClass
), Html::tag("div", array(), '')));
}
protected function translateArea($area) {
if ($area == 5) {
return 'left';
} else if ($area == 8) {
return 'right';
}
return parent::translateArea($area);
}
} Widget/Arrow/ArrowText/ArrowText.php 0000644 00000006102 15235523313 0013471 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Widget\Arrow\ArrowText;
use Nextend\Framework\Form\Element\Font;
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\Arrow\AbstractWidgetArrow;
class ArrowText extends AbstractWidgetArrow {
protected $key = 'widget-arrow-';
protected $defaults = array(
'widget-arrow-style' => '{"data":[{"backgroundcolor":"000000ab","padding":"8|*|10|*|8|*|10|*|px","boxshadow":"0|*|0|*|0|*|0|*|000000ff","border":"0|*|solid|*|000000ff","borderradius":"3","extra":""},{"backgroundcolor":"04C018FF"}]}',
'widget-arrow-font' => '{"data":[{"color":"ffffffff","size":"12||px","tshadow":"0|*|0|*|0|*|000000ff","afont":"Montserrat","lineheight":"1.3","bold":0,"italic":0,"underline":0,"align":"left","extra":""},{}]}',
'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
);
public function __construct($widgetGroup, $name, $defaults = array()) {
parent::__construct($widgetGroup, $name, array_merge(array(
'widget-arrow-previous-label' => n2_('Prev'),
'widget-arrow-next-label' => n2_('Next')
), $defaults));
}
public function renderFields($container) {
$row1 = new FieldsetRow($container, 'widget-arrow-text-row-1');
new Text($row1, 'widget-arrow-previous-label', n2_('Previous label'));
new Text($row1, 'widget-arrow-next-label', n2_('Next label'));
$row2 = new FieldsetRow($container, 'widget-arrow-text-row-2');
new Style($row2, 'widget-arrow-style', n2_('Arrow'), '', array(
'mode' => 'button',
'font' => 'sliderwidget-arrow-font',
'preview' => 'SmartSliderAdminWidgetArrowText'
));
new Font($row2, 'widget-arrow-font', n2_('Text'), '', array(
'mode' => 'link',
'style' => 'sliderwidget-arrow-style',
'preview' => 'SmartSliderAdminWidgetArrowText'
));
new WidgetPosition($row2, 'widget-arrow-previous-position', n2_('Previous position'));
new WidgetPosition($row2, 'widget-arrow-next-position', n2_('Next position'));
}
public function prepareExport($export, $params) {
$export->addVisual($params->get($this->key . 'font'));
$export->addVisual($params->get($this->key . 'style'));
}
public function prepareImport($import, $params) {
$params->set($this->key . 'font', $import->fixSection($params->get($this->key . 'font', '')));
$params->set($this->key . 'style', $import->fixSection($params->get($this->key . 'style', '')));
}
} Widget/Arrow/ArrowText/ArrowTextFrontend.php 0000644 00000007423 15235523313 0015200 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Widget\Arrow\ArrowText;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Widget\AbstractWidgetFrontend;
class ArrowTextFrontend extends AbstractWidgetFrontend {
protected $rendered = false;
protected $previousArguments;
protected $nextArguments;
public function __construct($sliderWidget, $widget, $params) {
parent::__construct($sliderWidget, $widget, $params);
$this->addToPlacement($this->key . 'previous-position-', array(
$this,
'renderPrevious'
));
$this->addToPlacement($this->key . 'next-position-', array(
$this,
'renderNext'
));
}
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;
}
Js::addStaticGroup(self::getAssetsPath() . '/dist/w-arrow-text.min.js', 'w-arrow-text');
$slider->features->addInitCallback('new _N2.SmartSliderWidgetArrowText(this);');
$slider->sliderType->addJSDependency('SmartSliderWidgetArrowText');
$displayAttributes = $this->getDisplayAttributes($params, $this->key);
$slider->addLess(self::getAssetsPath() . '/style.n2less', array(
"sliderid" => $slider->elementId
));
$font = $slider->addFont($params->get($this->key . 'font'), 'hover');
$style = $slider->addStyle($params->get($this->key . 'style'), 'heading');
$this->previousArguments = array(
$id,
'previous',
$displayAttributes,
$font,
$style
);
$this->nextArguments = array(
$id,
'next',
$displayAttributes,
$font,
$style
);
}
private function getHtml($attributes, $id, $side, $displayAttributes, $font, $styleClass) {
$label = '';
switch ($side) {
case 'previous':
$label = n2_('Previous slide');
break;
case 'next':
$label = n2_('Next slide');
break;
}
$html = Html::openTag("div", Html::mergeAttributes($attributes, $displayAttributes, array(
'id' => $id . '-arrow-' . $side,
"class" => "nextend-arrow nextend-arrow-{$side} n2-ow-all",
'tabindex' => '0',
'role' => 'button',
'aria-label' => $label
)));
$html .= Html::tag('div', array(
"class" => $styleClass . ' ' . $font . ' nextend-arrow-text',
"style" => 'display:inline-block'
), $this->params->get($this->key . $side . '-label'));
$html .= Html::closeTag("div");
return $html;
}
} Widget/Arrow/ArrowReveal/ArrowReveal.php 0000644 00000010476 15235523313 0014266 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Widget\Arrow\ArrowReveal;
use Nextend\Framework\Form\Element\Font;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Radio\ImageListFromFolder;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Text\Color;
use Nextend\Framework\Form\Fieldset\FieldsetRow;
use Nextend\SmartSlider3\Widget\Arrow\AbstractWidgetArrow;
class ArrowReveal extends AbstractWidgetArrow {
protected $defaults = array(
'widget-arrow-previous-position-mode' => 'simple',
'widget-arrow-previous-position-area' => 6,
'widget-arrow-previous-position-offset' => 0,
'widget-arrow-next-position-mode' => 'simple',
'widget-arrow-next-position-area' => 7,
'widget-arrow-next-position-offset' => 0,
'widget-arrow-font' => '',
'widget-arrow-background' => '00000080',
'widget-arrow-title-show' => 0,
'widget-arrow-title-font' => '{"data":[{"color":"ffffffff","size":"12||px","tshadow":"0|*|0|*|0|*|000000ff","afont":"Montserrat","lineheight":"1.3","bold":0,"italic":0,"underline":0,"align":"left","extra":""},{}]}',
'widget-arrow-title-background' => '000000cc',
'widget-arrow-animation' => 'slide',
'widget-arrow-previous-color' => 'ffffffcc',
'widget-arrow-previous' => '$ss$/plugins/widgetarrow/reveal/reveal/previous/simple-horizontal.svg',
'widget-arrow-mirror' => 1,
'widget-arrow-next-color' => 'ffffffcc',
'widget-arrow-next' => '$ss$/plugins/widgetarrow/reveal/reveal/next/simple-horizontal.svg'
);
public function renderFields($container) {
$row1 = new FieldsetRow($container, 'widget-arrow-reveal-row-1');
new Color($row1, 'widget-arrow-background', n2_('Background'), '', array(
'alpha' => true
));
new Select($row1, 'widget-arrow-animation', n2_('Animation'), '', array(
'options' => array(
'slide' => n2_x('Slide', 'Animation'),
'fade' => n2_('Fade'),
'turn' => n2_('Turn')
)
));
$rowPrevious = new FieldsetRow($container, 'widget-arrow-reveal-row-previous');
new ImageListFromFolder($rowPrevious, 'widget-arrow-previous', n2_x('Previous', 'Arrow direction'), '', array(
'post' => 'break',
'folder' => self::getAssetsPath() . '/previous/'
));
new Color($rowPrevious, 'widget-arrow-previous-color', n2_('Color'), '', array(
'alpha' => true
));
new OnOff($rowPrevious, 'widget-arrow-mirror', n2_('Mirror'), '', array(
'relatedFieldsOff' => array(
'sliderwidget-arrow-next',
'sliderwidget-arrow-next-color'
)
));
new ImageListFromFolder($rowPrevious, 'widget-arrow-next', n2_x('Next', 'Arrow direction'), '', array(
'post' => 'break',
'folder' => self::getAssetsPath() . '/next/'
));
new Color($rowPrevious, 'widget-arrow-next-color', n2_('Color'), '', array(
'alpha' => true
));
$rowTitle = new FieldsetRow($container, 'widget-arrow-reveal-row-title');
new OnOff($rowTitle, 'widget-arrow-title-show', n2_('Slide title'), 0, array(
'relatedFieldsOn' => array(
'sliderwidget-arrow-title-font',
'sliderwidget-arrow-title-background'
)
));
new Font($rowTitle, 'widget-arrow-title-font', n2_('Font'), '', array(
'mode' => 'link',
'preview' => 'SmartSliderAdminWidgetArrowReveal'
));
new Color($rowTitle, 'widget-arrow-title-background', n2_('Background color'), '', array(
'alpha' => true
));
}
public function prepareExport($export, $params) {
$export->addVisual($params->get($this->key . 'title-font'));
}
public function prepareImport($import, $params) {
$params->set($this->key . 'title-font', $import->fixSection($params->get($this->key . 'title-font', '')));
}
} Widget/Arrow/ArrowReveal/ArrowRevealFrontend.php 0000644 00000015236 15235523313 0015765 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Widget\Arrow\ArrowReveal;
use Nextend\Framework\Asset\Js\Js;
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 ArrowRevealFrontend extends AbstractWidgetFrontend {
protected $rendered = false;
protected $previousArguments;
protected $nextArguments;
public function __construct($sliderWidget, $widget, $params) {
parent::__construct($sliderWidget, $widget, $params);
$this->slider->exposeSlideData['thumbnail'] = true;
$this->addToPlacement($this->key . 'previous-position-', array(
$this,
'renderPrevious'
));
$this->addToPlacement($this->key . 'next-position-', array(
$this,
'renderNext'
));
}
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;
}
$RGBA = Color::colorToRGBA($params->get($this->key . 'background'));
$titleRGBA = Color::colorToRGBA($params->get($this->key . 'title-background'));
$slider->addLess(self::getAssetsPath() . '/style.n2less', array(
"sliderid" => $slider->elementId,
"arrowBackgroundRGBA" => $RGBA,
"titleBackgroundRGBA" => $titleRGBA
));
Js::addStaticGroup(self::getAssetsPath() . '/dist/w-arrow-reveal.min.js', 'w-arrow-reveal');
$previousValue = basename($params->get($this->key . 'previous'));
if ($previousValue == -1) {
$previous = false;
} else {
$previous = ResourceTranslator::pathToResource(self::getAssetsPath() . '/previous/' . $previousValue);
}
$previousColor = $params->get($this->key . 'previous-color');
if ($params->get($this->key . 'mirror')) {
if ($previousValue == -1) {
$next = false;
} else {
$next = ResourceTranslator::pathToResource(self::getAssetsPath() . '/next/' . $previousValue);
}
$nextColor = $previousColor;
} else {
$nextValue = basename($params->get($this->key . 'next'));
if ($nextValue == -1) {
$next = false;
} else {
$next = ResourceTranslator::pathToResource(self::getAssetsPath() . '/next/' . $nextValue);
}
$nextColor = $params->get($this->key . 'next-color');
}
$fontClass = $slider->addFont($params->get($this->key . 'title-font'), 'simple');
$animation = $params->get($this->key . 'animation');
$animationClass = ' n2-ss-arrow-animation-' . $animation;
if ($previous) {
$this->previousArguments = array(
$id,
'previous',
$previous,
$fontClass,
$animationClass,
$previousColor
);
}
if ($next) {
$this->nextArguments = array(
$id,
'next',
$next,
$fontClass,
$animationClass,
$nextColor
);
}
$slider->features->addInitCallback('new _N2.SmartSliderWidgetArrowReveal(this,"' . $animation . '");');
$slider->sliderType->addJSDependency('SmartSliderWidgetArrowReveal');
}
/**
* @param array $attributes
* @param $id
* @param $side
* @param $image
* @param $fontClass
* @param $animationClass
* @param $color
*
* @return string
*/
private function getHTML($attributes, $id, $side, $image, $fontClass, $animationClass, $color) {
$displayAttributes = $this->getDisplayAttributes($this->params, $this->key);
$ext = pathinfo($image, PATHINFO_EXTENSION);
if ($ext == 'svg' && ResourceTranslator::isResource($image)) {
list($color, $opacity) = Color::colorToSVG($color);
$image = 'data:image/svg+xml;base64,' . Base64::encode(str_replace(array(
'fill="#FFF"',
'opacity="1"'
), array(
'fill="#' . $color . '"',
'opacity="' . $opacity . '"'
), Filesystem::readFile(ResourceTranslator::toPath($image))));
} else {
$image = ResourceTranslator::toUrl($image);
}
$label = '';
switch ($side) {
case 'previous':
$label = n2_('Previous slide');
break;
case 'next':
$label = n2_('Next slide');
break;
}
return Html::tag('div', Html::mergeAttributes($attributes, $displayAttributes, array(
'id' => $id . '-arrow-' . $side,
'class' => 'nextend-arrow n2-ow nextend-arrow-reveal nextend-arrow-' . $side . $animationClass,
'role' => 'button',
'aria-label' => $label,
'tabindex' => '0'
)), Html::tag('div', array(
'class' => ' nextend-arrow-image n2-ow'
), $this->params->get($this->key . 'title-show') ? Html::tag('div', array(
'class' => $fontClass . ' nextend-arrow-title n2-ow'
), '') : '') . Html::tag('div', array(
'class' => 'nextend-arrow-arrow n2-ow',
'style' => 'background-image: url(' . $image . ');'
), ''));
}
} Widget/Arrow/ArrowImageBar/ArrowImageBar.php 0000644 00000005010 15235523313 0014734 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Widget\Arrow\ArrowImageBar;
use Nextend\Framework\Form\Element\OnOff;
use Nextend\Framework\Form\Element\Radio\ImageListFromFolder;
use Nextend\Framework\Form\Element\Text\Color;
use Nextend\Framework\Form\Element\Text\Number;
use Nextend\Framework\Form\Fieldset\FieldsetRow;
use Nextend\SmartSlider3\Widget\Arrow\AbstractWidgetArrow;
class ArrowImageBar extends AbstractWidgetArrow {
protected $defaults = array(
'widget-arrow-previous-position-mode' => 'simple',
'widget-arrow-previous-position-area' => 2,
'widget-arrow-previous-position-offset' => 0,
'widget-arrow-next-position-mode' => 'simple',
'widget-arrow-next-position-area' => 4,
'widget-arrow-next-position-offset' => 0,
'widget-arrow-width' => 100,
'widget-arrow-previous-color' => 'ffffffcc',
'widget-arrow-previous' => '$ss$/plugins/widgetarrow/imagebar/imagebar/previous/simple-horizontal.svg',
'widget-arrow-mirror' => 1,
'widget-arrow-next-color' => 'ffffffcc',
'widget-arrow-next' => '$ss$/plugins/widgetarrow/imagebar/imagebar/next/simple-horizontal.svg'
);
public function renderFields($container) {
$row1 = new FieldsetRow($container, 'widget-arrow-image-bar-row-1');
new Number($row1, 'widget-arrow-width', n2_('Width'), 0, array(
'style' => 'width:40px;',
'unit' => 'px'
));
$rowIcon = new FieldsetRow($container, 'widget-arrow-image-bar-row-icon');
new ImageListFromFolder($rowIcon, 'widget-arrow-previous', n2_x('Previous', 'Arrow direction'), '', array(
'folder' => self::getAssetsPath() . '/previous/'
));
new Color($rowIcon, 'widget-arrow-previous-color', n2_('Color'), '', array(
'alpha' => true
));
new OnOff($rowIcon, 'widget-arrow-mirror', n2_('Mirror'), '', array(
'relatedFieldsOff' => array(
'sliderwidget-arrow-next',
'sliderwidget-arrow-next-color'
)
));
new ImageListFromFolder($rowIcon, 'widget-arrow-next', n2_x('Next', 'Arrow direction'), '', array(
'folder' => self::getAssetsPath() . '/next/'
));
new Color($rowIcon, 'widget-arrow-next-color', n2_('Color'), '', array(
'alpha' => true
));
}
} Widget/Arrow/ArrowImageBar/ArrowImageBarFrontend.php 0000644 00000013636 15235523313 0016451 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Widget\Arrow\ArrowImageBar;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\Data\Data;
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 ArrowImageBarFrontend extends AbstractWidgetFrontend {
protected $rendered = false;
protected $previousArguments;
protected $nextArguments;
public function __construct($sliderWidget, $widget, $params) {
parent::__construct($sliderWidget, $widget, $params);
$this->slider->exposeSlideData['thumbnail'] = true;
$this->addToPlacement($this->key . 'previous-position-', array(
$this,
'renderPrevious'
));
$this->addToPlacement($this->key . 'next-position-', array(
$this,
'renderNext'
));
}
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;
}
$slider->addLess(self::getAssetsPath() . '/style.n2less', array(
"sliderid" => $slider->elementId
));
Js::addStaticGroup(self::getAssetsPath() . '/dist/w-arrow-imagebar.min.js', 'w-arrow-imagebar');
$previousValue = basename($params->get($this->key . 'previous'));
if ($previousValue == -1) {
$previous = false;
} else {
$previous = ResourceTranslator::pathToResource(self::getAssetsPath() . '/previous/' . $previousValue);
}
$previousColor = $params->get($this->key . 'previous-color');
if ($params->get($this->key . 'mirror')) {
if ($previousValue == -1) {
$next = false;
} else {
$next = ResourceTranslator::pathToResource(self::getAssetsPath() . '/next/' . $previousValue);
}
$nextColor = $previousColor;
} else {
$nextValue = basename($params->get($this->key . 'next'));
if ($nextValue == -1) {
$next = false;
} else {
$next = ResourceTranslator::pathToResource(self::getAssetsPath() . '/next/' . $nextValue);
}
$nextColor = $params->get($this->key . 'next-color');
}
if ($previous) {
$this->previousArguments = array(
$id,
'previous',
$previous,
$previousColor
);
}
if ($next) {
$this->nextArguments = array(
$id,
'next',
$next,
$nextColor
);
}
$slider->features->addInitCallback('new _N2.SmartSliderWidgetArrowImageBar(this);');
$slider->sliderType->addJSDependency('SmartSliderWidgetArrowImageBar');
}
/**
* @param array $attributes
* @param $id
* @param Data $params
* @param $side
*
* @return string
*/
private function getHTML($attributes, $id, $side, $image, $color) {
$displayAttributes = $this->getDisplayAttributes($this->params, $this->key);
$ext = pathinfo($image, PATHINFO_EXTENSION);
if ($ext == 'svg' && ResourceTranslator::isResource($image)) {
list($color, $opacity) = Color::colorToSVG($color);
$image = 'data:image/svg+xml;base64,' . Base64::encode(str_replace(array(
'fill="#FFF"',
'opacity="1"'
), array(
'fill="#' . $color . '"',
'opacity="' . $opacity . '"'
), Filesystem::readFile(ResourceTranslator::toPath($image))));
} else {
$image = ResourceTranslator::toUrl($image);
}
$style = 'width: ' . intval($this->params->get($this->key . 'width')) . 'px';
$label = '';
switch ($side) {
case 'previous':
$label = n2_('Previous slide');
break;
case 'next':
$label = n2_('Next slide');
break;
}
return Html::tag('div', Html::mergeAttributes($attributes, $displayAttributes, array(
'id' => $id . '-arrow-' . $side,
'class' => 'nextend-arrow nextend-arrow-imagebar n2-ow-all nextend-arrow-' . $side,
'style' => $style,
'role' => 'button',
'aria-label' => $label,
'tabindex' => '0'
)), Html::tag('div', array(
'class' => 'nextend-arrow-image'
), '') . Html::tag('div', array(
'class' => 'nextend-arrow-arrow',
'style' => 'background-image: url(' . $image . ');'
), ''));
}
} Widget/Arrow/ArrowGrow/ArrowGrowFrontend.php 0000644 00000014176 15235523313 0015167 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Widget\Arrow\ArrowGrow;
use Nextend\Framework\Asset\Js\Js;
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 ArrowGrowFrontend extends AbstractWidgetFrontend {
protected $rendered = false;
protected $previousArguments;
protected $nextArguments;
public function __construct($sliderWidget, $widget, $params) {
parent::__construct($sliderWidget, $widget, $params);
$this->addToPlacement($this->key . 'previous-position-', array(
$this,
'renderPrevious'
));
$this->addToPlacement($this->key . 'next-position-', array(
$this,
'renderNext'
));
}
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 '';
}
$slider->addLess(self::getAssetsPath() . '/style.n2less', array(
"sliderid" => $slider->elementId
));
Js::addStaticGroup(self::getAssetsPath() . '/dist/w-arrow-grow.min.js', 'w-arrow-grow');
$previousValue = basename($params->get($this->key . 'previous'));
if ($previousValue == -1) {
$previous = false;
} else {
$previous = ResourceTranslator::pathToResource(self::getAssetsPath() . '/previous/' . $previousValue);
}
$previousColor = $params->get($this->key . 'previous-color');
if ($params->get($this->key . 'mirror')) {
if ($previousValue == -1) {
$next = false;
} else {
$next = ResourceTranslator::pathToResource(self::getAssetsPath() . '/next/' . $previousValue);
}
$nextColor = $previousColor;
} else {
$nextValue = basename($params->get($this->key . 'next'));
if ($nextValue == -1) {
$next = false;
} else {
$next = ResourceTranslator::pathToResource(self::getAssetsPath() . '/next/' . $nextValue);
}
$nextColor = $params->get($this->key . 'next-color');
}
$fontClass = $slider->addFont($params->get($this->key . 'font'), 'hover');
$styleClass = $slider->addStyle($params->get($this->key . 'style'), 'heading');
if ($previous) {
$this->previousArguments = array(
$id,
'previous',
$previous,
$fontClass,
$styleClass,
$previousColor
);
}
if ($next) {
$this->nextArguments = array(
$id,
'next',
$next,
$fontClass,
$styleClass,
$nextColor
);
}
$slider->features->addInitCallback('new _N2.SmartSliderWidgetArrowGrow(this, ' . $params->get($this->key . 'animation-delay') . ');');
$slider->sliderType->addJSDependency('SmartSliderWidgetArrowGrow');
}
/**
* @param array $attributes
* @param $id
* @param $side
* @param $image
* @param $fontClass
* @param $styleClass
* @param $color
*
* @return string
*/
protected function getHTML($attributes, $id, $side, $image, $fontClass, $styleClass, $color) {
$displayAttributes = $this->getDisplayAttributes($this->params, $this->key);
$ext = pathinfo($image, PATHINFO_EXTENSION);
if ($ext == 'svg' && ResourceTranslator::isResource($image)) {
list($color, $opacity) = Color::colorToSVG($color);
$image = 'data:image/svg+xml;base64,' . Base64::encode(str_replace(array(
'fill="#FFF"',
'opacity="1"'
), array(
'fill="#' . $color . '"',
'opacity="' . $opacity . '"'
), Filesystem::readFile(ResourceTranslator::toPath($image))));
} else {
$image = ResourceTranslator::toUrl($image);
}
$label = '';
switch ($side) {
case 'previous':
$label = n2_('Previous slide');
break;
case 'next':
$label = n2_('Next slide');
break;
}
return Html::tag('div', Html::mergeAttributes($attributes, $displayAttributes, array(
'id' => $id . '-arrow-' . $side,
'class' => $styleClass . 'nextend-arrow n2-ow-all nextend-arrow-grow nextend-arrow-' . $side,
'role' => 'button',
'aria-label' => $label,
'tabindex' => '0'
)), Html::tag('div', array(
'class' => $fontClass . ' nextend-arrow-title'
), '') . Html::tag('div', array(
'class' => 'nextend-arrow-arrow',
'style' => 'background-image: url(' . $image . ');'
), ''));
}
} Widget/Arrow/ArrowGrow/ArrowGrow.php 0000644 00000007241 15235523313 0013462 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Widget\Arrow\ArrowGrow;
use Nextend\Framework\Form\Element\Font;
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\Fieldset\FieldsetRow;
use Nextend\SmartSlider3\Widget\Arrow\AbstractWidgetArrow;
class ArrowGrow extends AbstractWidgetArrow {
protected $defaults = array(
'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-style' => '{"data":[{"backgroundcolor":"00000080","padding":"3|*|3|*|3|*|3|*|px","boxshadow":"0|*|0|*|0|*|0|*|000000ff","border":"0|*|solid|*|000000ff","borderradius":"50","extra":""},{"backgroundcolor":"1D81F9FF"}]}',
'widget-arrow-font' => '{"data":[{"color":"ffffffff","size":"12||px","tshadow":"0|*|0|*|0|*|000000ff","afont":"Montserrat","lineheight":"1.3","bold":0,"italic":0,"underline":0,"align":"left","extra":""},{}]}',
'widget-arrow-previous-color' => 'ffffffcc',
'widget-arrow-previous' => '$ss$/plugins/widgetarrow/grow/grow/previous/simple-horizontal.svg',
'widget-arrow-mirror' => 1,
'widget-arrow-next-color' => 'ffffffcc',
'widget-arrow-next' => '$ss$/plugins/widgetarrow/grow/grow/next/simple-horizontal.svg'
);
public function renderFields($container) {
$rowIcon = new FieldsetRow($container, 'widget-arrow-grow-row-icon');
new ImageListFromFolder($rowIcon, 'widget-arrow-previous', n2_x('Previous', 'Arrow direction'), '', array(
'folder' => self::getAssetsPath() . '/previous/'
));
new Color($rowIcon, 'widget-arrow-previous-color', n2_('Color'), '', array(
'alpha' => true
));
new OnOff($rowIcon, 'widget-arrow-mirror', n2_('Mirror'), '', array(
'relatedFieldsOff' => array(
'sliderwidget-arrow-next',
'sliderwidget-arrow-next-color'
)
));
new ImageListFromFolder($rowIcon, 'widget-arrow-next', n2_x('Next', 'Arrow direction'), '', array(
'folder' => self::getAssetsPath() . '/next/'
));
new Color($rowIcon, 'widget-arrow-next-color', n2_('Color'), '', array(
'alpha' => true
));
$row3 = new FieldsetRow($container, 'widget-arrow-grow-row-3');
new Style($row3, 'widget-arrow-style', n2_('Arrow'), '', array(
'mode' => 'button',
'preview' => 'SmartSliderAdminWidgetArrowGrow'
));
new Font($row3, 'widget-arrow-font', n2_('Text'), '', array(
'mode' => 'link',
'preview' => 'SmartSliderAdminWidgetArrowGrow',
'style' => 'sliderwidget-arrow-style'
));
}
public function prepareExport($export, $params) {
$export->addVisual($params->get($this->key . 'style'));
$export->addVisual($params->get($this->key . 'font'));
}
public function prepareImport($import, $params) {
$params->set($this->key . 'style', $import->fixSection($params->get($this->key . 'style', '')));
$params->set($this->key . 'font', $import->fixSection($params->get($this->key . 'font', '')));
}
} Widget/Indicator/AbstractWidgetIndicator.php 0000644 00000000346 15235523313 0015165 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Widget\Indicator;
use Nextend\SmartSlider3\Widget\AbstractWidget;
abstract class AbstractWidgetIndicator extends AbstractWidget {
protected $key = 'widget-indicator-';
} Widget/Indicator/IndicatorStripe/IndicatorStripe.php 0000644 00000003102 15235523313 0016620 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Widget\Indicator\IndicatorStripe;
use Nextend\Framework\Form\Element\Text;
use Nextend\Framework\Form\Element\Text\Color;
use Nextend\Framework\Form\Element\Text\Number;
use Nextend\Framework\Form\Fieldset\FieldsetRow;
use Nextend\SmartSlider3\Form\Element\Group\WidgetPosition;
use Nextend\SmartSlider3Pro\Widget\Indicator\AbstractWidgetIndicator;
class IndicatorStripe extends AbstractWidgetIndicator {
protected $defaults = array(
'widget-indicator-position-mode' => 'simple',
'widget-indicator-position-area' => 9,
'widget-indicator-width' => '100%',
'widget-indicator-height' => 6,
'widget-indicator-track' => '000000ab',
'widget-indicator-bar' => '1D81F9FF'
);
public function renderFields($container) {
$row1 = new FieldsetRow($container, 'widget-indicator-stripe-1');
new WidgetPosition($row1, 'widget-indicator-position', n2_('Position'));
new Text($row1, 'widget-indicator-width', n2_('Width'), '', array(
'style' => 'width:30px;',
'unit' => 'px'
));
new Number($row1, 'widget-indicator-height', n2_('Height'), '', array(
'wide' => 4,
'unit' => 'px'
));
new Color($row1, 'widget-indicator-track', n2_('Track color'), '', array(
'alpha' => true
));
new Color($row1, 'widget-indicator-bar', n2_('Bar color'), '', array(
'alpha' => true
));
}
} Widget/Indicator/IndicatorStripe/IndicatorStripeFrontend.php 0000644 00000004536 15235523313 0020334 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Widget\Indicator\IndicatorStripe;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\Parser\Color;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Widget\AbstractWidgetFrontend;
class IndicatorStripeFrontend 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 '';
}
$slider->addLess(self::getAssetsPath() . '/style.n2less', array(
"sliderid" => $slider->elementId
));
Js::addStaticGroup(self::getAssetsPath() . '/dist/w-indicator-stripe.min.js', 'w-indicator-stripe');
$displayAttributes = $this->getDisplayAttributes($params, $this->key);
$trackRGBA = Color::colorToRGBA($params->get($this->key . 'track'));
$barRGBA = Color::colorToRGBA($params->get($this->key . 'bar'));
$style = '';
$width = $params->get($this->key . 'width');
if (is_numeric($width) || substr($width, -1) == '%' || substr($width, -2) == 'px') {
$style .= 'width:' . $width . ';';
}
$height = intval($params->get($this->key . 'height'));
$parameters = array(
'area' => intval($params->get($this->key . 'position-area'))
);
$slider->features->addInitCallback('new _N2.SmartSliderWidgetIndicatorStripe(this, ' . json_encode($parameters) . ');');
$slider->sliderType->addJSDependency('SmartSliderWidgetIndicatorStripe');
return Html::tag('div', Html::mergeAttributes($attributes, $displayAttributes, array(
'class' => "nextend-indicator nextend-indicator-stripe n2-ow-all",
'style' => 'background-color:' . $trackRGBA . ';' . $style
)), Html::tag('div', array(
'class' => "nextend-indicator-track",
'style' => 'height: ' . $height . 'px;background-color:' . $barRGBA . ';'
), ''));
}
} Widget/Indicator/IndicatorPie/IndicatorPie.php 0000644 00000003453 15235523313 0015347 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Widget\Indicator\IndicatorPie;
use Nextend\Framework\Form\Element\Style;
use Nextend\Framework\Form\Element\Text\Color;
use Nextend\Framework\Form\Element\Text\Number;
use Nextend\Framework\Form\Fieldset\FieldsetRow;
use Nextend\SmartSlider3\Form\Element\Group\WidgetPosition;
use Nextend\SmartSlider3Pro\Widget\Indicator\AbstractWidgetIndicator;
class IndicatorPie extends AbstractWidgetIndicator {
protected $defaults = array(
'widget-indicator-position-mode' => 'simple',
'widget-indicator-position-area' => 4,
'widget-indicator-position-offset' => 15,
'widget-indicator-size' => 25,
'widget-indicator-thickness' => 30,
'widget-indicator-track' => '000000ab',
'widget-indicator-bar' => 'ffffffff'
);
public function renderFields($container) {
$row1 = new FieldsetRow($container, 'widget-indicator-pie-1');
new WidgetPosition($row1, 'widget-indicator-position', n2_('Position'));
new Number($row1, 'widget-indicator-size', n2_('Size'), '', array(
'wide' => 4,
'unit' => 'px'
));
new Number($row1, 'widget-indicator-thickness', n2_('Line thickness'), '', array(
'wide' => 3,
'unit' => '%'
));
new Color($row1, 'widget-indicator-track', n2_('Track color'), '', array(
'alpha' => true
));
new Color($row1, 'widget-indicator-bar', n2_('Bar color'), '', array(
'alpha' => true
));
new Style($row1, 'widget-indicator-style', n2_('Style'), '', array(
'mode' => 'button',
'preview' => 'SmartSliderAdminWidgetIndicatorPie'
));
}
} Widget/Indicator/IndicatorPie/IndicatorPieFrontend.php 0000644 00000004236 15235523313 0017047 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Widget\Indicator\IndicatorPie;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\Parser\Color;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Widget\AbstractWidgetFrontend;
class IndicatorPieFrontend 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 '';
}
$slider->addLess(self::getAssetsPath() . '/style.n2less', array(
"sliderid" => $slider->elementId
));
Js::addStaticGroup(self::getAssetsPath() . '/dist/w-indicator-pie.min.js', 'w-indicator-pie');
$displayAttributes = $this->getDisplayAttributes($params, $this->key);
$track = Color::colorToSVG($params->get($this->key . 'track'));
$bar = Color::colorToSVG($params->get($this->key . 'bar'));
$parameters = array(
'backstroke' => $track[0],
'backstrokeopacity' => $track[1],
'frontstroke' => $bar[0],
'frontstrokeopacity' => $bar[1],
'size' => intval($params->get($this->key . 'size')),
'thickness' => $params->get($this->key . 'thickness') / 100
);
$styleClass = $slider->addStyle($params->get($this->key . 'style'), 'heading');
$slider->features->addInitCallback('new _N2.SmartSliderWidgetIndicatorPie(this, ' . json_encode($parameters) . ');');
$slider->sliderType->addJSDependency('SmartSliderWidgetIndicatorPie');
return Html::tag('div', Html::mergeAttributes($attributes, $displayAttributes, array(
'class' => $styleClass . " nextend-indicator nextend-indicator-pie n2-ow-all"
)));
}
} Widget/Group/FullScreen.php 0000644 00000004764 15235523313 0011653 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\Widget\Group;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\Message\Warning;
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\Group\AbstractWidgetGroup;
class FullScreen extends AbstractWidgetGroup {
use PluggableTrait;
public $ordering = 9;
public function __construct() {
parent::__construct();
$this->makePluggable('SliderWidgetFullScreen');
}
public function getName() {
return 'fullscreen';
}
public function getLabel() {
return n2_('Fullscreen');
}
public function renderFields($container) {
$form = $container->getForm();
$this->compatibility($form);
/**
* Used for field removal: /controls/widget-fullscreen
*/
$table = new ContainerTable($container, 'widget-fullscreen', n2_('Fullscreen'));
new OnOff($table->getFieldsetLabel(), 'widget-fullscreen-enabled', false, 0, array(
'relatedFieldsOn' => array(
'table-rows-widget-fullscreen'
)
));
$fullscreenWarning = $table->createRow('widget-fullscreen-warning');
$warningText = sprintf(n2_('%1$s does not support the full screen API. For this reason the full screen button will not appear on %1$s devices.'), 'iPhone');
new Warning($fullscreenWarning, 'widget-fullscreen-warning-iphone', $warningText);
$row1 = $table->createRow('widget-fullscreen-1');
$url = $form->createAjaxUrl(array("slider/renderwidgetfullscreen"));
new ControlTypePicker($row1, 'widgetfullscreen', $table, $url, $this, 'image');
$row2 = $table->createRow('widget-fullscreen-2');
new OnOff($row2, 'widget-fullscreen-display-hover', n2_('Shows on hover'), 0);
$this->addHideOnFeature('widget-fullscreen-display-', $row2);
new Text($row2, 'widget-fullscreen-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/1859-fullscreen#hide-on-slides'
));
}
} Widget/Group/Html.php 0000644 00000003714 15235523313 0010507 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\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\Group\AbstractWidgetGroup;
class Html extends AbstractWidgetGroup {
use PluggableTrait;
public $ordering = 10;
protected $showOnMobileDefault = 1;
public function __construct() {
parent::__construct();
$this->makePluggable('SliderWidgetHtml');
}
public function getName() {
return 'html';
}
public function getLabel() {
return 'HTML';
}
public function renderFields($container) {
$form = $container->getForm();
$this->compatibility($form);
$table = new ContainerTable($container, 'widget-html', 'HTML');
new OnOff($table->getFieldsetLabel(), 'widget-html-enabled', false, 0, array(
'relatedFieldsOn' => array(
'table-rows-widget-html'
)
));
$row1 = $table->createRow('widget-html-1');
$url = $form->createAjaxUrl(array("slider/renderwidgethtml"));
new ControlTypePicker($row1, 'widgethtml', $table, $url, $this, 'html');
$row2 = $table->createRow('widget-html-2');
new OnOff($row2, 'widget-html-display-hover', n2_('Shows on hover'), 0);
$this->addHideOnFeature('widget-html-display-', $row2);
new Text($row2, 'widget-html-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/1860-html#hide-on-slides'
));
}
} Widget/Group/Indicator.php 0000644 00000004006 15235523313 0011512 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\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\Group\AbstractWidgetGroup;
class Indicator extends AbstractWidgetGroup {
use PluggableTrait;
public $ordering = 4;
public function __construct() {
parent::__construct();
$this->makePluggable('SliderWidgetIndicator');
}
public function getName() {
return 'indicator';
}
public function getLabel() {
return n2_('Indicator');
}
public function renderFields($container) {
$form = $container->getForm();
$this->compatibility($form);
$table = new ContainerTable($container, 'widget-indicator', n2_('Indicator'));
new OnOff($table->getFieldsetLabel(), 'widget-indicator-enabled', false, 0, array(
'relatedFieldsOn' => array(
'table-rows-widget-indicator'
)
));
$row1 = $table->createRow('widget-indicator-1');
$url = $form->createAjaxUrl(array("slider/renderwidgetindicator"));
new ControlTypePicker($row1, 'widgetindicator', $table, $url, $this);
$row2 = $table->createRow('widget-indicator-2');
new OnOff($row2, 'widget-indicator-display-hover', n2_('Shows on hover'), 0);
$this->addHideOnFeature('widget-indicator-display-', $row2);
new Text($row2, 'widget-indicator-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-35'
));
}
} SplitText/ModelSplitText.php 0000644 00000015554 15235523313 0012152 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\SplitText;
use Nextend\Framework\Form\Container\ContainerTable;
use Nextend\Framework\Form\Element\MixedField;
use Nextend\Framework\Form\Element\Radio;
use Nextend\Framework\Form\Element\Select;
use Nextend\Framework\Form\Element\Select\Easing;
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\Fieldset\FieldsetVisualSet;
use Nextend\Framework\Form\Form;
use Nextend\Framework\Model\StorageSectionManager;
use Nextend\Framework\Visual\ModelVisual;
class ModelSplitText extends ModelVisual {
protected $type = 'splittextanimation';
protected function init() {
SplitTextStorage::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(), 'splittextanimation-sets', n2_('Sets'));
new Select($setsTab, 'sets', false, '');
$form->render();
}
public function renderForm() {
$form = new Form($this, 'n2-splittextanimation-editor');
$table = new ContainerTable($form->getContainer(), 'splittextanimation-table', n2_('Text animation settings'));
$table->setFieldsetPositionEnd();
$firstRow = $table->createRow('firstrow');
new Radio($firstRow, 'mode', n2_('Mode'), 'chars', array(
'options' => array(
'chars' => n2_('Chars'),
'words' => n2_('Words')
)
));
new Select($firstRow, 'sort', n2_('Sort'), 'normal', array(
'options' => array(
'normal' => n2_('Normal'),
'reversed' => n2_('Reversed'),
'random' => n2_('Random'),
'side' => n2_('Side'),
'sideShifted' => n2_('Side shifted'),
'center' => n2_('Center'),
'centerShifted' => n2_('Center shifted')
)
));
new NumberAutoComplete($firstRow, 'duration', n2_('Duration'), 800, array(
'style' => 'width:40px;',
'min' => 0,
'values' => array(
500,
800,
1000,
1500,
2000
),
'unit' => 'ms'
));
new NumberAutoComplete($firstRow, 'stagger', n2_('Stagger'), 50, array(
'style' => 'width:40px;',
'values' => array(
25,
50,
100,
200,
400
),
'unit' => 'ms'
));
new Easing($firstRow, 'easing', n2_('Easing'), 'easeOutCubic');
$transformOrigin = new MixedField($firstRow, 'transformorigin', n2_('Transform origin'), '50|*|50|*|0');
new NumberAutoComplete($transformOrigin, 'transformorigin-1', false, '', array(
'sublabel' => 'X',
'values' => array(
0,
50,
100
),
'unit' => '%',
'wide' => 4
));
new NumberAutoComplete($transformOrigin, 'transformorigin-2', false, '', array(
'sublabel' => 'Y',
'values' => array(
0,
50,
100
),
'unit' => '%',
'wide' => 4
));
new Number($transformOrigin, 'transformorigin-3', false, '', array(
'sublabel' => 'Z',
'unit' => 'px',
'wide' => 4
));
$secondRow = $table->createRow('thirdrow');
new NumberSlider($secondRow, 'opacity', n2_('Opacity'), 100, array(
'style' => 'width:22px;',
'min' => 0,
'max' => 100,
'unit' => '%'
));
new NumberAutoComplete($secondRow, 'scale', n2_('Scale'), 100, array(
'style' => 'width:40px;',
'min' => 0,
'max' => 9999,
'values' => array(
0,
50,
100,
150,
1000
),
'unit' => '%'
));
$offset = new MixedField($secondRow, 'offset', n2_('Offset'), '0|*|0');
new NumberAutoComplete($offset, 'offset-1', false, '', array(
'style' => 'width:40px;',
'sublabel' => 'X',
'values' => array(
-400,
-200,
-100,
0,
100,
200,
400
),
'unit' => 'px'
));
new NumberAutoComplete($offset, 'offset-2', false, '', array(
'style' => 'width:40px;',
'sublabel' => 'Y',
'values' => array(
-400,
-200,
-100,
0,
100,
200,
400
),
'unit' => 'px'
));
$rotate = new MixedField($secondRow, 'rotate', n2_('Rotate'), '0|*|0|*|0');
new NumberAutoComplete($rotate, 'rotate-1', false, '', array(
'style' => 'width:40px;',
'sublabel' => 'X',
'values' => array(
0,
90,
180,
-90,
-180
),
'unit' => '°'
));
new NumberAutoComplete($rotate, 'rotate-2', false, '', array(
'style' => 'width:40px;',
'sublabel' => 'Y',
'values' => array(
0,
90,
180,
-90,
-180
),
'unit' => '°'
));
new NumberAutoComplete($rotate, 'rotate-3', false, '', array(
'style' => 'width:40px;',
'sublabel' => 'Z',
'values' => array(
0,
90,
180,
-90,
-180
),
'unit' => '°'
));
$previewTable = new ContainerTable($form->getContainer(), 'splittextanimation-preview', n2_('Preview'));
$previewTable->setFieldsetPositionEnd();
new Color($previewTable->getFieldsetLabel(), 'preview-background', false, 'ced3d5');
$form->render();
}
} SplitText/SplitTextManager.php 0000644 00000000700 15235523313 0012447 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\SplitText;
use Nextend\Framework\Pattern\VisualManagerTrait;
use Nextend\SmartSlider3Pro\SplitText\Block\SplitTextManager\BlockSplitTextManager;
class SplitTextManager {
use VisualManagerTrait;
public function display() {
$postBackgroundAnimationManagerBlock = new BlockSplitTextManager($this->MVCHelper);
$postBackgroundAnimationManagerBlock->display();
}
} SplitText/SplitTextRenderer.php 0000644 00000024201 15235523313 0012645 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\SplitText;
use Nextend\Framework\Asset\Css\Css;
use Nextend\Framework\Misc\Base64;
use Nextend\Framework\Model\Section;
use Nextend\Framework\Settings;
class SplitTextRenderer {
public static $pre = '';
public static $sets = array();
public static $animations = array();
/**
* @var Animation
*/
public static $animation;
public static $mode;
public static function preLoad($animationId) {
if (intval($animationId) > 0) {
$animation = Section::getById($animationId, 'animation');
if ($animation) {
self::$sets[] = $animation['referencekey'];
}
}
}
public static function render($animation, $mode, $group, $pre = '') {
$cssData = self::_render($animation, $mode, $pre);
if ($cssData) {
Css::addCode($cssData[1], $group);
return $cssData[0];
}
return '';
}
public static function _render($animation, $mode, $pre = '') {
self::$pre = $pre;
if (intval($animation) > 0) {
// Linked
$animation = Section::getById($animation, 'animation');
if ($animation) {
if (is_string($animation['value'])) {
$decoded = $animation['value'];
if ($decoded[0] != '{') {
$decoded = Base64::decode($decoded);
}
$value = json_decode($decoded, true);
} else {
$value = $animation['value'];
}
$selector = 'n2-animation-' . $animation['id'] . '-' . $mode;
self::$sets[] = $animation['referencekey'];
if (!isset(self::$animations[$animation['id']])) {
self::$animations[$animation['id']] = array(
$mode
);
} else if (!in_array($mode, self::$animations[$animation['id']])) {
self::$animations[$animation['id']][] = $mode;
}
return array(
$selector . ' ',
self::renderStyle($mode, $pre, $selector, $value['data'])
);
}
} else if ($animation != '') {
$decoded = $animation;
if ($decoded[0] != '{') {
$decoded = Base64::decode($decoded);
} else {
$animation = Base64::encode($decoded);
}
$value = json_decode($decoded, true);
if ($value) {
$selector = 'n2-animation-' . md5($animation) . '-' . $mode;
return array(
$selector . ' ',
self::renderStyle($mode, $pre, $selector, $value['data'])
);
}
}
return false;
}
private static function renderStyle($mode, $pre, $selector, $tabs) {
$search = array(
'@pre',
'@selector'
);
$replace = array(
$pre,
'.' . $selector
);
$tabs[0] = array_merge(array(
'backgroundcolor' => 'ffffff00',
'opacity' => 100,
'padding' => '0|*|0|*|0|*|0|*|px',
'boxshadow' => '0|*|0|*|0|*|0|*|000000ff',
'border' => '0|*|solid|*|000000ff',
'borderradius' => '0',
'extra' => '',
), $tabs[0]);
foreach ($tabs as $k => $tab) {
$search[] = '@tab' . $k;
$replace[] = self::$animation->animation($tab);
}
$template = '';
foreach (self::$mode[$mode]['selectors'] as $s => $animation) {
if (!in_array($animation, $search) || !empty($replace[array_search($animation, $search)])) {
$template .= $s . "{" . $animation . "}";
}
}
return str_replace($search, $replace, $template);
}
}
$frontendAccessibility = intval(Settings::get('frontend-accessibility', 1));
SplitTextRenderer::$mode = array(
'0' => array(
'id' => '0',
'label' => n2_('Single'),
'tabs' => array(
n2_('Text')
),
'renderOptions' => array(
'combined' => false
),
'preview' => '<div class="{styleClassName}">Lorem ipsum dolor sit amet, consectetur adipiscing 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. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</div>',
'selectors' => array(
'@pre@selector' => '@tab'
)
),
'simple' => array(
'id' => 'simple',
'label' => n2_('Simple'),
'tabs' => array(
n2_('Normal')
),
'renderOptions' => array(
'combined' => true
),
'preview' => '<div class="{styleClassName}" style="width: 200px; height:100px;"></div>',
'selectors' => array(
'@pre@selector' => '@tab0'
)
),
'box' => array(
'id' => 'box',
'label' => n2_('Box'),
'tabs' => array(
n2_('Normal'),
n2_('Hover')
),
'renderOptions' => array(
'combined' => true
),
'preview' => '<div class="{styleClassName}" style="width: 200px; height:100px;"></div>',
'selectors' => array(
'@pre@selector' => '@tab0',
'@pre@selector:HOVER' => '@tab1'
)
),
'button' => array(
'id' => 'button',
'label' => n2_('Button'),
'tabs' => array(
n2_('Normal'),
n2_('Hover')
),
'renderOptions' => array(
'combined' => true
),
'preview' => '<div><a style="display:inline-block; margin:20px;" class="{styleClassName}" href="#" onclick="return false;">Button</a></div>',
'selectors' => $frontendAccessibility ? array(
'@pre@selector' => '@tab0',
'@pre@selector:Hover, @pre@selector:ACTIVE, @pre@selector:FOCUS' => '@tab1'
) : array(
'@pre@selector, @pre@selector:FOCUS' => '@tab0',
'@pre@selector:Hover, @pre@selector:ACTIVE' => '@tab1'
)
),
'heading' => array(
'id' => 'heading',
'label' => n2_('Heading'),
'tabs' => array(
n2_('Normal'),
n2_('Hover')
),
'renderOptions' => array(
'combined' => true
),
'preview' => '<div class="{styleClassName}">Heading</div>',
'selectors' => $frontendAccessibility ? array(
'@pre@selector' => '@tab0',
'@pre@selector:Hover, @pre@selector:ACTIVE, @pre@selector:FOCUS' => '@tab1'
) : array(
'@pre@selector, @pre@selector:FOCUS' => '@tab0',
'@pre@selector:Hover, @pre@selector:ACTIVE' => '@tab1'
)
),
'heading-active' => array(
'id' => 'heading-active',
'label' => n2_('Heading active'),
'tabs' => array(
n2_('Normal'),
n2_('Active')
),
'renderOptions' => array(
'combined' => true
),
'preview' => '<div class="{styleClassName}">Heading</div>',
'selectors' => array(
'@pre@selector' => '@tab0',
'@pre@selector.n2-active' => '@tab1'
)
),
'dot' => array(
'id' => 'dot',
'label' => n2_('Dot'),
'tabs' => array(
n2_('Normal'),
n2_('Active')
),
'renderOptions' => array(
'combined' => true
),
'preview' => '<div><div class="{styleClassName}" style="display: inline-block; margin: 3px;"></div><div class="{styleClassName} n2-active" style="display: inline-block; margin: 3px;"></div><div class="{styleClassName}" style="display: inline-block; margin: 3px;"></div></div>',
'selectors' => array(
'@pre@selector' => '@tab0',
'@pre@selector.n2-active, @pre@selector:HOVER' => '@tab1'
)
),
'highlight' => array(
'id' => 'highlight',
'label' => n2_('Highlight'),
'tabs' => array(
n2_('Normal'),
n2_('Highlight'),
n2_('Hover')
),
'renderOptions' => array(
'combined' => true
),
'preview' => '<div class="{fontClassName}">' . n2_('Button') . '</div>',
'selectors' => $frontendAccessibility ? array(
'@pre@selector' => '@tab0',
'@pre@selector .n2-highlighted' => '@tab1',
'@pre@selector .n2-highlighted:HOVER, @pre@selector .n2-highlighted:ACTIVE, @pre@selector .n2-highlighted:FOCUS' => '@tab2'
) : array(
'@pre@selector' => '@tab0',
'@pre@selector .n2-highlighted, @pre@selector .n2-highlighted:FOCUS' => '@tab1',
'@pre@selector .n2-highlighted:HOVER, @pre@selector .n2-highlighted:ACTIVE' => '@tab2'
)
),
); SplitText/SplitTextStorage.php 0000644 00000005140 15235523313 0012504 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\SplitText;
use Nextend\Framework\Pattern\SingletonTrait;
use Nextend\Framework\Plugin;
class SplitTextStorage {
use SingletonTrait;
private $sets = array();
private $animation = array();
private $animationBySet = array();
private $animationById = array();
protected function init() {
Plugin::addAction('smartslidersplittextanimationset', array(
$this,
'animationSet'
));
Plugin::addAction('smartslidersplittextanimation', array(
$this,
'animations'
));
Plugin::addAction('splittextanimation', array(
$this,
'animation'
));
}
private function load() {
static $loaded;
if (!$loaded) {
Plugin::doAction('splitTextAnimationStorage', 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]['isSystem'] = 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]['isSystem'] = 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]['isSystem'] = 1;
$this->animationById[$id]['editable'] = 0;
$animation = $this->animationById[$id];
}
}
} SplitText/Block/SplitTextManager/BlockSplitTextManager.php 0000644 00000004054 15235523313 0017715 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\SplitText\Block\SplitTextManager;
use Nextend\Framework\Asset\Js\Js;
use Nextend\Framework\Visual\AbstractBlockVisual;
use Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButtonCancel;
use Nextend\SmartSlider3\Application\Admin\Layout\Block\Forms\Button\BlockButtonSave;
use Nextend\SmartSlider3Pro\SplitText\ModelSplitText;
use Nextend\SmartSlider3Pro\SplitText\SplitTextRenderer;
class BlockSplitTextManager extends AbstractBlockVisual {
/** @var ModelSplitText */
protected $model;
/**
* @return ModelSplitText
*/
public function getModel() {
return $this->model;
}
public function display() {
$this->model = new ModelSplitText($this);
$this->renderTemplatePart('Index');
}
public function displayTopBar() {
$buttonCancel = new BlockButtonCancel($this);
$buttonCancel->addClass('n2_fullscreen_editor__cancel');
$buttonCancel->display();
$buttonApply = new BlockButtonSave($this);
$buttonApply->setLabel(n2_('Apply'));
$buttonApply->addClass('n2_fullscreen_editor__save');
$buttonApply->display();
}
public function displaySidebar() {
$this->renderTemplatePart('Sidebar');
}
public function displayContent() {
$model = $this->getModel();
$sets = $model->getSets();
SplitTextRenderer::$sets[] = $sets[0]['id'];
$animations = array();
foreach (array_unique(SplitTextRenderer::$sets) as $setId) {
$animations[$setId] = $model->getVisuals($setId);
}
Js::addFirstCode("
new _N2.NextendSplitTextAnimationManager({
fixedSet: 1000,
sets: " . json_encode($sets) . ",
visuals: " . json_encode($animations) . ",
ajaxUrl: '" . $this->createAjaxUrl(array('splittextanimation/index')) . "'
});
");
$model->renderForm();
}
} SplitText/Block/SplitTextManager/Index.php 0000644 00000002032 15235523313 0014550 0 ustar 00 <?php
namespace Nextend\SmartSlider3Pro\SplitText\Block\SplitTextManager;
/**
* @var BlockSplitTextManager $this
*/
?>
<div id="n2-lightbox-splittextanimation" 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('Text 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->displaySidebar(); ?>
</div>
<div class="n2_fullscreen_editor__content_content n2_container_scrollable">
<?php $this->displayContent(); ?>
</div>
</div>
</div>
</div>