Your IP : 216.73.216.190


Current Path : /proc/1908984/root/proc/thread-self/root/proc/3662834/cwd/
Upload File :
Current File : //proc/1908984/root/proc/thread-self/root/proc/3662834/cwd/Feature.tar

Align.php000064400000003335152416125460006321 0ustar00<?php


namespace Nextend\SmartSlider3\Slider\Feature;


use Nextend\Framework\View\Html;

class Align {

    private $slider;

    public $align = 'normal';

    public function __construct($slider) {

        $this->slider = $slider;

        $this->align = $slider->params->get('align', 'normal');
    }

    public function renderSlider($sliderHTML, $maxWidth) {

        $htmlOptions = array(
            "id"     => $this->slider->elementId . '-align',
            "class"  => "n2-ss-align",
            "encode" => false
        );

        $htmlOptionsPadding = array(
            "class" => 'n2-padding'
        );

        if (!$this->slider->features->responsive->scaleUp && $this->align != 'normal') {
            switch ($this->align) {
                case 'left':
                case 'right':
                    $width                = $this->slider->assets->sizes['width'];
                    $htmlOptions["style"] = "float: {$this->align}; width: {$width}px; max-width:100%;";
                    break;
                case 'center':
                    $htmlOptions["style"] = "margin: 0 auto; max-width: {$maxWidth}px;";
                    break;
            }
        }

        $sliderHTML = Html::tag("div", $htmlOptions, Html::tag("div", $htmlOptionsPadding, $sliderHTML));

        if ($this->slider->params->get('clear-both-after', 1)) {
            $sliderHTML .= Html::tag("div", array("class" => "n2_clear"), "");
        }

        return $sliderHTML;
    }

    public function makeJavaScriptProperties(&$properties) {
        $properties['align']     = $this->align;
        $properties['isDelayed'] = intval($this->slider->params->get('is-delayed', 0));
    }
}Autoplay.php000064400000011364152416125530007064 0ustar00<?php


namespace Nextend\SmartSlider3\Slider\Feature;


use Nextend\Framework\Data\Data;
use Nextend\Framework\Parser\Common;
use Nextend\SmartSlider3\Slider\Slider;

#[\AllowDynamicProperties]
class Autoplay {

    /**
     * @var Slider
     */
    private $slider;

    public $isEnabled = 0, $isStart = 0, $duration = 8000;
    public $isLoop = 1, $interval = 1, $intervalModifier = 'loop', $intervalSlide = 'current', $allowReStart = 0;
    public $stopOnClick = 1, $stopOnMediaStarted = 1;
    public $resumeOnMediaEnded = 1, $resumeOnSlideChanged = 0;


    public function __construct($slider) {

        $this->slider = $slider;
        $params       = $slider->params;
        $this->upgradeData($params);
    

        $this->isEnabled = intval($params->get('autoplay', 0));
        $this->isStart   = intval($params->get('autoplayStart', 1));
        $this->duration  = intval($params->get('autoplayDuration', 8000));

        if ($this->duration < 1) {
            $this->duration = 1500;
        }

        list($this->interval, $this->intervalModifier, $this->intervalSlide) = (array)Common::parse($slider->params->get('autoplayfinish', '1|*|loop|*|current'));

        $this->allowReStart = intval($params->get('autoplayAllowReStart', 0));

        $this->isLoop = intval($params->get('autoplayLoop', 1));

        $this->interval = intval($this->interval);

        $this->stopOnClick        = intval($params->get('autoplayStopClick', 1));
        $this->stopOnMouse        = $params->get('autoplayStopMouse', 'enter');
        $this->stopOnMediaStarted = intval($params->get('autoplayStopMedia', 1));


        $this->resumeOnClick      = intval($params->get('autoplayResumeClick', 0));
        $this->resumeOnMouse      = $params->get('autoplayResumeMouse', 0);
        $this->resumeOnMediaEnded = intval($params->get('autoplayResumeMedia', 1));


    }

    public function makeJavaScriptProperties(&$properties) {
        $properties['autoplay'] = array(
            'enabled'          => $this->isEnabled,
            'start'            => $this->isStart,
            'duration'         => $this->duration,
            'autoplayLoop'     => $this->isLoop,
            'allowReStart'     => $this->allowReStart,
            'pause'            => array(
                'click'        => $this->stopOnClick,
                'mouse'        => $this->stopOnMouse,
                'mediaStarted' => $this->stopOnMediaStarted
            ),
            'resume'           => array(
                'click'        => $this->resumeOnClick,
                'mouse'        => $this->resumeOnMouse,
                'mediaEnded'   => $this->resumeOnMediaEnded,
                'slidechanged' => $this->resumeOnSlideChanged
            ),
            'interval'         => $this->interval,
            'intervalModifier' => $this->intervalModifier,
            'intervalSlide'    => $this->intervalSlide
        );
    }

    /**
     * For compatibility with legacy autoplay values.
     *
     * @param Data $params
     */
    protected function upgradeData($params) {
        list($interval, $intervalModifier, $intervalSlide) = (array)Common::parse($params->get('autoplayfinish', '1|*|loop|*|current'));

        if ($interval <= 0 || $params->get('autoplayLoop') === '') {
            // 0|*|loop|*|current -> In old versions it brought to the Next slide.
            if ($intervalModifier === 'slide' && $intervalSlide === 'next') {
                $params->set('autoplayfinish', '1|*|slide|*|current');
                $params->set('autoplayLoop', '0');
            }

            // 0|*|loop/slide/slideindex|*|current -> Infinite loop
            // 0|*|loop|*|next -> Infinite loop
            if ($intervalSlide === 'current' || ($intervalModifier === 'loop' && $intervalSlide === 'next')) {
                $params->set('autoplayfinish', '1|*|loop|*|current');
                $params->set('autoplayLoop', '1');
            }

            // 0|*|slideindex|*|next -> In old versions it always brought to the 2nd slide.
            if ($intervalModifier === 'slideindex' && $intervalSlide === 'next') {
                $params->set('autoplayfinish', '2|*|slideindex|*|current');
                $params->set('autoplayLoop', '0');
            } else {
                //next is not allowed for "slide" and "slideindex" modifiers
                if ($intervalModifier === 'slide' || $intervalModifier === 'slideindex') {
                    $params->set('autoplayfinish', $interval . '|*|' . $intervalModifier . '|*|current');
                    // turn off Loop, and work with the original settings
                    $params->set('autoplayLoop', '0');
                }
            }

        }
    
    }
}BlockRightClick.php000064400000000677152416125600010267 0ustar00<?php


namespace Nextend\SmartSlider3\Slider\Feature;


class BlockRightClick {

    private $slider;

    public $isEnabled = 0;

    public function __construct($slider) {

        $this->slider = $slider;

        $this->isEnabled = intval($slider->params->get('blockrightclick', 0));
    }

    public function makeJavaScriptProperties(&$properties) {

        $properties['blockrightclick'] = $this->isEnabled;
    }
}Controls.php000064400000002303152416125650007065 0ustar00<?php


namespace Nextend\SmartSlider3\Slider\Feature;


class Controls {

    private $slider;

    private $mousewheel = 0;

    public $drag = 0;

    public $touch = 1;

    public $keyboard = 0;

    public $blockCarouselInteraction = 1;

    public function __construct($slider) {

        $this->slider = $slider;

        $this->mousewheel               = intval($slider->params->get('controlsScroll', 0));
        $this->keyboard                 = intval($slider->params->get('controlsKeyboard', 1));
        $this->blockCarouselInteraction = intval($slider->params->get('controlsBlockCarouselInteraction', 1));
        $this->touch                    = $slider->params->get('controlsTouch', 'horizontal');
        if ($slider->getSlidesCount() < 2) {
            $this->touch = 0;
        }
    }

    public function makeJavaScriptProperties(&$properties) {
        $properties['controls'] = array(
            'mousewheel'               => $this->mousewheel,
            'touch'                    => $this->touch,
            'keyboard'                 => $this->keyboard,
            'blockCarouselInteraction' => $this->blockCarouselInteraction
        );
    }
}Focus.php000064400000003257152416125720006350 0ustar00<?php


namespace Nextend\SmartSlider3\Slider\Feature;


use Nextend\SmartSlider3\Settings;
use Nextend\SmartSlider3\Slider\Slider;

class Focus {

    /**
     * @var Slider
     */
    private $slider;

    private $focusOffsetTop = '';

    private $focusOffsetBottom = '';


    public function __construct($slider) {

        $this->slider = $slider;
        $responsiveHeightOffsetValue = '';
    

        $this->focusOffsetTop    = Settings::get('responsive-focus-top', $responsiveHeightOffsetValue);
        $this->focusOffsetBottom = Settings::get('responsive-focus-bottom', '');
    }

    public function makeJavaScriptProperties(&$properties) {
        $properties['responsive']['focus'] = array(
            'offsetTop'    => $this->focusOffsetTop,
            'offsetBottom' => $this->focusOffsetBottom
        );

        $params = $this->slider->params;

        if ($params->get('responsive-mode') == 'fullpage') {
            if (!$params->has('responsive-focus') && $params->has('responsiveHeightOffset')) {
                $old = $params->get('responsiveHeightOffset');

                $oldDefault = '';

                if ($old !== $oldDefault) {
                    $params->set('responsive-focus', 1);
                    $params->set('responsive-focus-top', $old);
                }
            }

            if ($params->get('responsive-focus', 0)) {
                $properties['responsive']['focus'] = array(
                    'offsetTop'    => $params->get('responsive-focus-top', ''),
                    'offsetBottom' => $params->get('responsive-focus-bottom', '')
                );
            }
        }
    }
}LayerMode.php000064400000004153152416125770007153 0ustar00<?php


namespace Nextend\SmartSlider3\Slider\Feature;


class LayerMode {

    private $slider;

    public $playOnce = 0;

    public $playFirstLayer = 1;

    public $mode = 'skippable';

    public $inAnimation = 'mainInEnd';

    public function __construct($slider) {

        $this->slider = $slider;

        $this->playOnce = intval($slider->params->get('playonce', 0));

        $this->playFirstLayer = intval($slider->params->get('playfirstlayer', 1));

        switch ($slider->params->get('layer-animation-play-mode', 'skippable')) {
            case 'forced':
                $this->mode = 'forced';
                break;
            default:
                $this->mode = 'skippable';
        }

        switch ($slider->params->get('layer-animation-play-in', 'end')) {
            case 'end':
                $this->inAnimation = 'mainInEnd';
                break;
            default:
                $this->inAnimation = 'mainInStart';
        }
    }

    public function makeJavaScriptProperties(&$properties) {
        $params                    = $this->slider->params;
        $properties['perspective'] = max(0, intval($params->get('perspective', 1500)));

        $properties['layerMode'] = array(
            'playOnce'       => $this->playOnce,
            'playFirstLayer' => $this->playFirstLayer,
            'mode'           => $this->mode,
            'inAnimation'    => $this->inAnimation
        );
        $properties['parallax'] = array(
            'enabled'    => intval($params->get('parallax-enabled', 1)),
            'mobile'     => intval($params->get('parallax-enabled-mobile', 0)),
            'is3D'       => intval($params->get('parallax-3d', 0)),
            'animate'    => intval($params->get('parallax-animate', 1)),
            'horizontal' => $params->get('parallax-horizontal', 'mouse'),
            'vertical'   => $params->get('parallax-vertical', 'mouse'),
            'origin'     => $params->get('parallax-mouse-origin', 'slider'),
            'scrollmove' => $params->get('parallax-scroll-move', 'both')
        );
    
    }
}LazyLoad.php000064400000002675152416126040007007 0ustar00<?php


namespace Nextend\SmartSlider3\Slider\Feature;


#[\AllowDynamicProperties]
class LazyLoad {

    private $slider;

    public $isEnabled = 0, $neighborCount = 0, $layerImageOptimize = 0, $layerImageWidthNormal = 1400, $layerImageWidthTablet = 800, $layerImageWidthMobile = 425;

    public function __construct($slider) {

        $this->slider = $slider;

        $this->isEnabled     = intval($slider->params->get('imageload', 0));
        $this->neighborCount = intval($slider->params->get('imageloadNeighborSlides', 0));

        $this->layerImageOptimize = intval($slider->params->get('layer-image-optimize', 0)) && !$slider->isAdmin;
        if ($this->layerImageOptimize) {
            $this->layerImageWidthNormal = $slider->params->get('layer-image-width-normal', 1400);
            $this->layerImageWidthTablet = $slider->params->get('layer-image-width-tablet', 800);
            $this->layerImageWidthMobile = $slider->params->get('layer-image-width-mobile', 425);
        }

        $this->layerImageSizeBase64     = intval($slider->params->get('layer-image-base64', 0)) && !$slider->isAdmin;
        $this->layerImageSizeBase64Size = max(0, intval($slider->params->get('layer-image-base64-size', 5))) * 1024;

    }

    public function makeJavaScriptProperties(&$properties) {

        $properties['lazyLoad']         = $this->isEnabled;
        $properties['lazyLoadNeighbor'] = $this->neighborCount;
    }
}MaintainSession.php000064400000000674152416126110010367 0ustar00<?php

namespace Nextend\SmartSlider3\Slider\Feature;

class MaintainSession {

    private $slider;

    public $isEnabled = 0;

    public function __construct($slider) {

        $this->slider = $slider;

        $this->isEnabled = intval($slider->params->get('maintain-session', 0));
    }

    public function makeJavaScriptProperties(&$properties) {

        $properties['maintainSession'] = $this->isEnabled;
    }
}Margin.php000064400000001740152416126170006501 0ustar00<?php


namespace Nextend\SmartSlider3\Slider\Feature;


use Nextend\Framework\Platform\Platform;
use Nextend\Framework\View\Html;

class Margin {

    private $slider;

    private $margin;

    public function __construct($slider) {

        $this->slider = $slider;

        $this->margin = explode('|*|', $slider->params->get('margin', '0|*|0|*|0|*|0'));
    }

    public function renderSlider($sliderHTML) {
        if (!Platform::isAdmin() && count($this->margin) >= 4) {
            array_splice($this->margin, 4);
            if ($this->margin[0] != 0 || $this->margin[1] != 0 || $this->margin[2] != 0 || $this->margin[3] != 0) {
                $sliderHTML = Html::tag("div", array(
                    "class"  => "n2-ss-margin",
                    "encode" => false,
                    "style"  => "margin: " . implode('px ', $this->margin) . "px;"
                ), $sliderHTML);
            }
        }

        return $sliderHTML;
    }
}Optimize.php000064400000026451152416126240007070 0ustar00<?php


namespace Nextend\SmartSlider3\Slider\Feature;


use Exception;
use Nextend\Framework\FastImageSize\FastImageSize;
use Nextend\Framework\Image\ImageEdit;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;

class Optimize {

    private $slider;

    private $playWhenVisible = 1;

    private $playWhenVisibleAt = 0.5;

    private $backgroundImageWidthNormal = 1920, $quality = 70, $thumbnailWidth = 100, $thumbnailHeight = 60, $thumbnailQuality = 70;

    public function __construct($slider) {

        $this->slider = $slider;

        $this->playWhenVisible   = intval($slider->params->get('playWhenVisible', 1));
        $this->playWhenVisibleAt = max(0, min(100, intval($slider->params->get('playWhenVisibleAt', 50)))) / 100;

        $this->backgroundImageWidthNormal = intval($slider->params->get('optimize-slide-width-normal', 1920));
        $this->quality                    = intval($slider->params->get('optimize-quality', 70));

        $this->thumbnailWidth   = $slider->params->get('optimizeThumbnailWidth', 100);
        $this->thumbnailHeight  = $slider->params->get('optimizeThumbnailHeight', 60);
        $this->thumbnailQuality = $slider->params->get('optimize-thumbnail-quality', 70);


    }

    public function makeJavaScriptProperties(&$properties) {
        $properties['playWhenVisible']   = $this->playWhenVisible;
        $properties['playWhenVisibleAt'] = $this->playWhenVisibleAt;
    }

    public function optimizeBackground($image, $x = 50, $y = 50) {
        try {
            $imageSize = FastImageSize::getSize($image);
            if ($imageSize) {
                $optimizeScale = $this->slider->params->get('optimize-scale', 0);

                $targetWidth  = $imageSize['width'];
                $targetHeight = $imageSize['height'];
                if ($optimizeScale && $targetWidth > $this->backgroundImageWidthNormal) {
                    $targetHeight = ceil($this->backgroundImageWidthNormal / $targetWidth * $targetHeight);
                    $targetWidth  = $this->backgroundImageWidthNormal;
                }

                return ImageEdit::resizeImage('slider/cache', ResourceTranslator::toPath($image), $targetWidth, $targetHeight, false, 'normal', 'ffffff', true, $this->quality, true, $x, $y);
            }

            return $image;

        } catch (Exception $e) {
            return $image;
        }
    }

    public function optimizeThumbnail($image) {
        if ($this->slider->params->get('optimize-thumbnail-scale', 0)) {
            try {
                return ImageEdit::resizeImage('slider/cache', ResourceTranslator::toPath($image), $this->thumbnailWidth, $this->thumbnailHeight, false, 'normal', 'ffffff', true, $this->thumbnailQuality, true);
            } catch (Exception $e) {

                return ResourceTranslator::toUrl($image);
            }
        }

        return ResourceTranslator::toUrl($image);
    }

    public function adminOptimizeThumbnail($image) {
        if ($this->slider->params->get('optimize-thumbnail-scale', 0)) {
            try {
                return ImageEdit::resizeImage('slider/cache', ResourceTranslator::toPath($image), $this->thumbnailWidth, $this->thumbnailHeight, true, 'normal', 'ffffff', true, $this->thumbnailQuality, true);
            } catch (Exception $e) {

                return ResourceTranslator::toUrl($image);
            }
        }

        return ResourceTranslator::toUrl($image);
    }


    public function optimizeImageWebP($src, $options) {

        $options = array_merge(array(
            'optimize'         => false,
            'quality'          => 70,
            'resize'           => false,
            'defaultWidth'     => 1920,
            'mediumWidth'      => 1200,
            'mediumHeight'     => 0,
            'smallWidth'       => 500,
            'smallHeight'      => 0,
            'focusX'           => 50,
            'focusY'           => 50,
            'compressOriginal' => false
        ), $options);
        $data = array();

        if ($options['optimize'] && function_exists('imagewebp')) {

            $resourceSrc = ResourceTranslator::urlToResource($src);
            $imagePath   = ResourceTranslator::toPath($resourceSrc);

            if (isset($imagePath)) {
                $isRemote = false;
                if ($resourceSrc == $imagePath) {
                    //this is a remote image
                    $isRemote  = true;
                    $imagePath = $src;
                } else {
                    $src = $resourceSrc;
                }

                $extension = pathinfo($imagePath, PATHINFO_EXTENSION);

                $originalImageWidth = FastImageSize::getWidth($src);

                if ($extension && $originalImageWidth) {

                    $normalScale = 1;
                    if ($options['resize']) {
                        if ($originalImageWidth > $options['defaultWidth']) {
                            $normalScale = $options['defaultWidth'] / $originalImageWidth;
                        }
                    }

                    $imageWebpUrl = ImageEdit::scaleImageWebp('slider/cache', $src, array(
                        'mode'    => 'scale',
                        'scale'   => $normalScale,
                        'quality' => $options['quality'],
                        'remote'  => $isRemote
                    ));

                    if ($imageWebpUrl) {

                        $width        = FastImageSize::getWidth($imageWebpUrl);
                        $imageWebpUrl = ResourceTranslator::toUrl($imageWebpUrl);

                        $data['normal'] = array(
                            'src'   => $imageWebpUrl,
                            'width' => $width
                        );

                        if ($options['resize']) {

                            if ($options['compressOriginal'] && $normalScale < 1) {

                                $imageWebpUrlOriginal = ImageEdit::scaleImageWebp('slider/cache', $src, array(
                                    'mode'    => 'scale',
                                    'quality' => $options['quality'],
                                    'remote'  => $isRemote
                                ));

                                if ($imageWebpUrlOriginal) {
                                    $width = FastImageSize::getWidth($imageWebpUrlOriginal);
                                    if ($width) {
                                        $imageWebpUrlOriginal = ResourceTranslator::toUrl($imageWebpUrlOriginal);

                                        $data['original'] = array(
                                            'src'   => $imageWebpUrlOriginal,
                                            'width' => $width
                                        );
                                    }
                                }
                            }

                            if ($originalImageWidth > $options['smallWidth'] && $options['defaultWidth'] > $options['smallWidth'] && $options['mediumWidth'] > $options['smallWidth']) {

                                if ($options['smallHeight'] > 0) {

                                    $imageWebpUrlSmall = ImageEdit::scaleImageWebp('slider/cache', $src, array(
                                        'mode'    => 'resize',
                                        'width'   => $options['smallWidth'],
                                        'height'  => $options['smallHeight'],
                                        'focusX'  => $options['focusX'],
                                        'focusY'  => $options['focusY'],
                                        'quality' => $options['quality'],
                                        'remote'  => $isRemote
                                    ));
                                } else {
                                    $mobileScale = $options['smallWidth'] / $originalImageWidth;

                                    $imageWebpUrlSmall = ImageEdit::scaleImageWebp('slider/cache', $src, array(
                                        'mode'    => 'scale',
                                        'scale'   => $mobileScale,
                                        'quality' => $options['quality'],
                                        'remote'  => $isRemote
                                    ));
                                }

                                if ($imageWebpUrlSmall) {
                                    $width = FastImageSize::getWidth($imageWebpUrlSmall);
                                    if ($width) {
                                        $imageWebpUrlSmall = ResourceTranslator::toUrl($imageWebpUrlSmall);

                                        $data['small'] = array(
                                            'src'   => $imageWebpUrlSmall,
                                            'width' => $width
                                        );
                                    }
                                }
                            }

                            if ($originalImageWidth > $options['mediumWidth'] && $options['defaultWidth'] > $options['mediumWidth']) {

                                if ($options['mediumHeight'] > 0) {

                                    $imageWebpUrlMedium = ImageEdit::scaleImageWebp('slider/cache', $src, array(
                                        'mode'    => 'resize',
                                        'width'   => $options['mediumWidth'],
                                        'height'  => $options['mediumHeight'],
                                        'focusX'  => $options['focusX'],
                                        'focusY'  => $options['focusY'],
                                        'quality' => $options['quality'],
                                        'remote'  => $isRemote
                                    ));
                                } else {
                                    $tabletScale = $options['mediumWidth'] / $originalImageWidth;

                                    $imageWebpUrlMedium = ImageEdit::scaleImageWebp('slider/cache', $src, array(
                                        'mode'    => 'scale',
                                        'scale'   => $tabletScale,
                                        'quality' => $options['quality'],
                                        'remote'  => $isRemote
                                    ));
                                }

                                if ($imageWebpUrlMedium) {
                                    $width = FastImageSize::getWidth($imageWebpUrlMedium);
                                    if ($width) {
                                        $imageWebpUrlMedium = ResourceTranslator::toUrl($imageWebpUrlMedium);

                                        $data['medium'] = array(
                                            'src'   => $imageWebpUrlMedium,
                                            'width' => $width
                                        );
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }

        return $data;
    
    }
}PostBackgroundAnimation.php000064400000005656152416126360012064 0ustar00<?php


namespace Nextend\SmartSlider3\Slider\Feature;


use Nextend\Framework\Model\Section;
use Nextend\Framework\Parser\Common;
use Nextend\SmartSlider3\Slider\Slide;
use Nextend\SmartSlider3Pro\PostBackgroundAnimation\PostBackgroundAnimationStorage;
class PostBackgroundAnimation {

    private $slider;

    private $hasSlideData = false;

    private $slideData = array();

    public function __construct($slider) {

        $this->slider = $slider;
    }

    /**
     * @param Slide $slide
     */
    public function makeSlide($slide) {
        $animations = $this->parseKenBurns($slide->parameters->get('kenburns-animation', '50|*|50|*|'));
        if ($animations) {
            $this->slideData[$slide->index] = array(
                'data'     => $animations,
                'speed'    => $slide->parameters->get('kenburns-animation-speed', 'default'),
                'strength' => $slide->parameters->get('kenburns-animation-strength', 'default')
            );
            $this->hasSlideData             = true;
        }
    }

    public function makeJavaScriptProperties(&$properties) {
        $properties['postBackgroundAnimations'] = array(
            'data'     => $this->parseKenBurns($this->slider->params->get('kenburns-animation', '50|*|50|*|')),
            'speed'    => $this->slider->params->get('kenburns-animation-speed', 'default'),
            'strength' => $this->slider->params->get('kenburns-animation-strength', 'default')
        );

        if ($this->hasSlideData) {
            $properties['postBackgroundAnimations']['slides'] = $this->slideData;
        } else if (!$properties['postBackgroundAnimations']['data']) {
            $properties['postBackgroundAnimations'] = 0;
        }

        if ($properties['postBackgroundAnimations'] && !$this->slider->isAdmin) {
            $this->slider->sliderType->addClass('n2-ss-feature-post-bg-loader');
        }
    }

    private function parseKenBurns($kenBurnsRaw) {

        $kenBurns   = Common::parse($kenBurnsRaw);
        $animations = array();
        if (is_array($kenBurns)) {
            if (count($kenBurns) >= 2) {
                $animations = array_unique(array_map('intval', (array)$kenBurns[2]));
            }
        }

        $jsProps = array();

        if (count($animations)) {
            PostBackgroundAnimationStorage::getInstance();

            foreach ($animations as $animationId) {
                $animation = Section::getById($animationId, 'postbackgroundanimation');
                if (isset($animation)) {
                    $jsProps[] = $animation['value']['data'];
                }
            }
            if (count($jsProps)) {
                return array(
                    'transformOrigin' => $kenBurns[0] . '% ' . $kenBurns[1] . '%',
                    'animations'      => $jsProps
                );
            }
        }

        return 0;
    }
}
Responsive.php000064400000103742152416126430007425 0ustar00<?php


namespace Nextend\SmartSlider3\Slider\Feature;


use Nextend\Framework\Data\Data;
use Nextend\SmartSlider3\Application\Admin\Settings\ViewSettingsGeneral;
use Nextend\SmartSlider3\Settings;
use Nextend\SmartSlider3\Slider\ResponsiveType\AbstractResponsiveTypeFrontend;
use Nextend\SmartSlider3\Slider\ResponsiveType\ResponsiveTypeFactory;
use Nextend\SmartSlider3\Slider\Slider;
use Nextend\SmartSlider3\SmartSlider3Info;

class Responsive {

    /** @var  Slider */
    public $slider;

    /**
     * @var AbstractResponsiveTypeFrontend
     */
    protected $responsivePlugin;

    protected $hideOnDesktopLandscape = 1;
    protected $hideOnDesktopPortrait = 1;

    protected $hideOnTabletLandscape = 1;
    protected $hideOnTabletPortrait = 1;

    protected $hideOnMobileLandscape = 1;
    protected $hideOnMobilePortrait = 1;

    public $onResizeEnabled = 1;

    public $type = 'auto';

    public $scaleDown = 1;

    public $scaleUp = 1;

    public $forceFull = 0;

    public $forceFullOverflowX = 'body';

    public $forceFullHorizontalSelector = '';

    public $minimumHeight = -1;

    public $maximumSlideWidthLandscape = -1;
    public $maximumSlideWidth = 10000;
    public $maximumSlideWidthTabletLandscape = -1;
    public $maximumSlideWidthTablet = -1;
    public $maximumSlideWidthMobileLandscape = -1;
    public $maximumSlideWidthMobile = -1;

    public $sliderHeightBasedOn = 'real';
    public $responsiveDecreaseSliderHeight = 0;

    public $focusUser = 1;

    public $focusEdge = 'auto';

    protected $enabledDevices = array(
        'desktopLandscape' => 0,
        'desktopPortrait'  => 1,
        'tabletLandscape'  => 0,
        'tabletPortrait'   => 1,
        'mobileLandscape'  => 0,
        'mobilePortrait'   => 1
    );

    protected $breakpoints = array();

    /**
     * @var array[]
     */
    public $mediaQueries = array(
        'all' => false
    );

    public $sizes = array(
        'desktopPortrait' => array(
            'width'  => 800,
            'height' => 600
        ),
    );

    public static $translation = array(
        'desktoplandscape' => 'desktopLandscape',
        'desktopportrait'  => 'desktopPortrait',
        'tabletlandscape'  => 'tabletLandscape',
        'tabletportrait'   => 'tabletPortrait',
        'mobilelandscape'  => 'mobileLandscape',
        'mobileportrait'   => 'mobilePortrait'
    );

    public function __construct($slider, $features) {

        $this->slider = $slider;

        $this->hideOnDesktopLandscape = !intval($slider->params->get('desktoplandscape', 1));
        $this->hideOnDesktopPortrait  = !intval($slider->params->get('desktopportrait', 1));

        $this->hideOnTabletLandscape = !intval($slider->params->get('tabletlandscape', 1));
        $this->hideOnTabletPortrait  = !intval($slider->params->get('tabletportrait', 1));

        $this->hideOnMobileLandscape = !intval($slider->params->get('mobilelandscape', 1));
        $this->hideOnMobilePortrait  = !intval($slider->params->get('mobileportrait', 1));


        $this->focusUser = intval($slider->params->get('responsiveFocusUser', 1));

        $this->focusEdge = $slider->params->get('responsiveFocusEdge', 'auto');

        $this->responsivePlugin = ResponsiveTypeFactory::createFrontend($slider->params->get('responsive-mode', 'auto'), $this);
        $this->type             = $this->responsivePlugin->getType();
        $this->responsivePlugin->parse($slider->params, $this, $features);

        $this->onResizeEnabled = !$slider->disableResponsive;

        if (!$this->scaleDown && !$this->scaleUp) {
            $this->onResizeEnabled = 0;
        }

        $overrideSizeEnabled = !!$slider->params->get('slider-size-override', 0);

        $this->sizes['desktopPortrait']['width']  = max(10, intval($slider->params->get('width', 1200)));
        $this->sizes['desktopPortrait']['height'] = max(10, intval($slider->params->get('height', 600)));

        $heightHelperRatio = $this->sizes['desktopPortrait']['height'] / $this->sizes['desktopPortrait']['width'];

        $this->enabledDevices['desktopLandscape'] = intval($slider->params->get('responsive-breakpoint-desktop-landscape-enabled', 0));
        $this->enabledDevices['tabletLandscape']  = intval($slider->params->get('responsive-breakpoint-tablet-landscape-enabled', 0));
        $this->enabledDevices['tabletPortrait']   = intval($slider->params->get('responsive-breakpoint-tablet-portrait-enabled', 1));
        $this->enabledDevices['mobileLandscape']  = intval($slider->params->get('responsive-breakpoint-mobile-landscape-enabled', 0));
        $this->enabledDevices['mobilePortrait']   = intval($slider->params->get('responsive-breakpoint-mobile-portrait-enabled', 1));

        $useLocalBreakpoints = !$slider->params->get('responsive-breakpoint-global', 0);

        $landscapePortraitWidth = $breakpointWidthLandscape = 3001;
        $previousSize           = false;

        if ($this->enabledDevices['desktopLandscape']) {

            $landscapePortraitWidth   = $breakpointWidthPortrait = intval($useLocalBreakpoints ? $slider->params->get('responsive-breakpoint-desktop-portrait', ViewSettingsGeneral::defaults['desktop-large-portrait']) : Settings::get('responsive-screen-width-desktop-portrait', ViewSettingsGeneral::defaults['desktop-large-portrait']));
            $breakpointWidthLandscape = max($landscapePortraitWidth, intval($useLocalBreakpoints ? $slider->params->get('responsive-breakpoint-desktop-portrait-landscape', ViewSettingsGeneral::defaults['desktop-large-landscape']) : Settings::get('responsive-screen-width-desktop-portrait-landscape', ViewSettingsGeneral::defaults['desktop-large-landscape'])));

            $this->breakpoints[] = array(
                'device'         => 'desktopLandscape',
                'type'           => 'min-screen-width',
                'portraitWidth'  => $breakpointWidthPortrait,
                'landscapeWidth' => $breakpointWidthLandscape
            );

            $editorWidth = intval($slider->params->get('desktop-landscape-width', 1440));

            if ($overrideSizeEnabled && $slider->params->get('slider-size-override-desktop-landscape', 0) && $editorWidth > 10) {

                $customHeight = false;
                $editorHeight = intval($slider->params->get('desktop-landscape-height', 900));

                if ($editorWidth < $breakpointWidthPortrait) {
                    if ($editorHeight > 0) {
                        $editorHeight = $breakpointWidthPortrait / $editorWidth * $editorHeight;
                    }

                    $editorWidth = $breakpointWidthPortrait;
                }

                if ($editorHeight <= 0) {
                    switch ($this->slider->data->get('type', 'simple')) {
                        case 'carousel':
                        case 'showcase':
                            $editorHeight = 0;
                            break;
                        default:
                            $editorHeight = $editorWidth * $heightHelperRatio;
                    }
                } else {
                    $customHeight = true;
                }

                $this->sizes['desktopLandscape'] = array(
                    'width'        => $editorWidth,
                    'height'       => floor($editorHeight),
                    'customHeight' => $customHeight
                );
            } else {

                $this->sizes['desktopLandscape'] = array(
                    'width'        => $this->sizes['desktopPortrait']['width'],
                    'height'       => $this->sizes['desktopPortrait']['height'],
                    'customHeight' => false
                );
            }

            $this->sizes['desktopLandscape']['max'] = 3000;
            $this->sizes['desktopLandscape']['min'] = $breakpointWidthPortrait;

            $previousSize = &$this->sizes['desktopLandscape'];

        }

        $this->sizes['desktopPortrait']['max'] = max($this->sizes['desktopPortrait']['width'], $landscapePortraitWidth - 1, $breakpointWidthLandscape - 1);

        $previousSize = &$this->sizes['desktopPortrait'];

        /**
         * Keep a copy of the current smallest width to be able to disable smaller devices
         */
        $smallestWidth = $this->sizes['desktopPortrait']['width'];

        if ($this->enabledDevices['tabletLandscape']) {

            $breakpointWidthPortrait  = intval($useLocalBreakpoints ? $slider->params->get('responsive-breakpoint-tablet-landscape', ViewSettingsGeneral::defaults['tablet-large-portrait']) : Settings::get('responsive-screen-width-tablet-landscape', ViewSettingsGeneral::defaults['tablet-large-portrait']));
            $breakpointWidthLandscape = max($breakpointWidthPortrait, intval($useLocalBreakpoints ? $slider->params->get('responsive-breakpoint-tablet-landscape-landscape', ViewSettingsGeneral::defaults['tablet-large-landscape']) : Settings::get('responsive-screen-width-tablet-landscape-landscape', ViewSettingsGeneral::defaults['tablet-large-landscape'])));

            $this->breakpoints[] = array(
                'device'         => 'tabletLandscape',
                'type'           => 'max-screen-width',
                'portraitWidth'  => $breakpointWidthPortrait,
                'landscapeWidth' => $breakpointWidthLandscape
            );

            $editorWidth = intval($slider->params->get('tablet-landscape-width', 1024));

            if ($overrideSizeEnabled && $slider->params->get('slider-size-override-tablet-landscape', 0) && $editorWidth > 10) {

                $customHeight = false;
                $editorHeight = intval($slider->params->get('tablet-landscape-height', 768));

                if ($editorWidth > $breakpointWidthPortrait) {
                    if ($editorHeight > 0) {
                        $editorHeight = $breakpointWidthPortrait / $editorWidth * $editorHeight;
                    }

                    $editorWidth = $breakpointWidthPortrait;
                }

                if ($editorHeight <= 0) {
                    $editorHeight = $editorWidth * $heightHelperRatio;
                } else {
                    $customHeight = true;
                }

                $this->sizes['tabletLandscape'] = array(
                    'width'        => $editorWidth,
                    'height'       => floor($editorHeight),
                    'customHeight' => $customHeight
                );

                $smallestWidth = min($smallestWidth, $editorWidth);
            } else {
                $width = min($smallestWidth, $breakpointWidthPortrait);

                $this->sizes['tabletLandscape'] = array(
                    'width'        => $width,
                    'height'       => floor($width * $heightHelperRatio),
                    'auto'         => true,
                    'customHeight' => false
                );

                $smallestWidth = min($smallestWidth, $breakpointWidthPortrait);
            }

            $this->sizes['tabletLandscape']['max'] = max($this->sizes['tabletLandscape']['width'], $breakpointWidthPortrait, $breakpointWidthLandscape);

            $previousSize['min'] = min($previousSize['width'], $breakpointWidthPortrait + 1);

            $previousSize = &$this->sizes['tabletLandscape'];

        }

        if ($this->enabledDevices['tabletPortrait']) {

            $breakpointWidthPortrait  = intval($useLocalBreakpoints ? $slider->params->get('responsive-breakpoint-tablet-portrait', ViewSettingsGeneral::defaults['tablet-portrait']) : Settings::get('responsive-screen-width-tablet-portrait', ViewSettingsGeneral::defaults['tablet-portrait']));
            $breakpointWidthLandscape = max($breakpointWidthPortrait, intval($useLocalBreakpoints ? $slider->params->get('responsive-breakpoint-tablet-portrait-landscape', ViewSettingsGeneral::defaults['tablet-landscape']) : Settings::get('responsive-screen-width-tablet-portrait-landscape', ViewSettingsGeneral::defaults['tablet-landscape'])));

            $this->breakpoints[] = array(
                'device'         => 'tabletPortrait',
                'type'           => 'max-screen-width',
                'portraitWidth'  => $breakpointWidthPortrait,
                'landscapeWidth' => $breakpointWidthLandscape
            );

            $editorWidth = intval($slider->params->get('tablet-portrait-width', 768));

            if ($overrideSizeEnabled && $slider->params->get('slider-size-override-tablet-portrait', 0) && $editorWidth > 10) {

                $customHeight = false;
                $editorHeight = intval($slider->params->get('tablet-portrait-height', 1024));

                if ($editorWidth > $breakpointWidthPortrait) {
                    if ($editorHeight > 0) {
                        $editorHeight = $breakpointWidthPortrait / $editorWidth * $editorHeight;
                    }

                    $editorWidth = $breakpointWidthPortrait;
                }

                if ($editorHeight <= 0) {
                    $editorHeight = $editorWidth * $heightHelperRatio;
                } else {
                    $customHeight = true;
                }

                $this->sizes['tabletPortrait'] = array(
                    'width'        => $editorWidth,
                    'height'       => floor($editorHeight),
                    'customHeight' => $customHeight
                );

                $smallestWidth = min($smallestWidth, $editorWidth);
            } else {
                $width = min($smallestWidth, $breakpointWidthPortrait);

                $this->sizes['tabletPortrait'] = array(
                    'width'        => $width,
                    'height'       => floor($width * $heightHelperRatio),
                    'auto'         => true,
                    'customHeight' => false
                );

                $smallestWidth = min($smallestWidth, $breakpointWidthPortrait);
            }

            $this->sizes['tabletPortrait']['max'] = max($this->sizes['tabletPortrait']['width'], $breakpointWidthPortrait, $breakpointWidthLandscape);

            $previousSize['min'] = min($previousSize['width'], $breakpointWidthPortrait + 1);

            $previousSize = &$this->sizes['tabletPortrait'];
        }

        if ($this->enabledDevices['mobileLandscape']) {

            $breakpointWidthPortrait  = intval($useLocalBreakpoints ? $slider->params->get('responsive-breakpoint-mobile-landscape', ViewSettingsGeneral::defaults['mobile-large-portrait']) : Settings::get('responsive-screen-width-mobile-landscape', ViewSettingsGeneral::defaults['mobile-large-portrait']));
            $breakpointWidthLandscape = max($breakpointWidthPortrait, intval($useLocalBreakpoints ? $slider->params->get('responsive-breakpoint-mobile-landscape-landscape', ViewSettingsGeneral::defaults['mobile-large-landscape']) : Settings::get('responsive-screen-width-mobile-landscape-landscape', ViewSettingsGeneral::defaults['mobile-large-landscape'])));

            $this->breakpoints[] = array(
                'device'         => 'mobileLandscape',
                'type'           => 'max-screen-width',
                'portraitWidth'  => $breakpointWidthPortrait,
                'landscapeWidth' => $breakpointWidthLandscape
            );


            $editorWidth = intval($slider->params->get('mobile-landscape-width', 568));

            if ($overrideSizeEnabled && $slider->params->get('slider-size-override-mobile-landscape', 0) && $editorWidth > 10) {

                $customHeight = false;
                $editorHeight = intval($slider->params->get('mobile-landscape-height', 320));

                if ($editorWidth > $breakpointWidthPortrait) {
                    if ($editorHeight > 0) {
                        $editorHeight = $breakpointWidthPortrait / $editorWidth * $editorHeight;
                    }

                    $editorWidth = $breakpointWidthPortrait;
                }

                if ($editorHeight <= 0) {
                    $editorHeight = $editorWidth * $heightHelperRatio;
                } else {
                    $customHeight = true;
                }

                $this->sizes['mobileLandscape'] = array(
                    'width'        => $editorWidth,
                    'height'       => floor($editorHeight),
                    'customHeight' => $customHeight
                );

                $smallestWidth = min($smallestWidth, $editorWidth);
            } else {

                $width = min($smallestWidth, $breakpointWidthPortrait);

                $this->sizes['mobileLandscape'] = array(
                    'width'        => $width,
                    'height'       => floor($width * $heightHelperRatio),
                    'auto'         => true,
                    'customHeight' => false
                );

                $smallestWidth = min($smallestWidth, $breakpointWidthPortrait);
            }

            $this->sizes['mobileLandscape']['max'] = max($this->sizes['mobileLandscape']['width'], $breakpointWidthPortrait, $breakpointWidthLandscape);

            $previousSize['min'] = min($previousSize['width'], $breakpointWidthPortrait + 1);

            $previousSize = &$this->sizes['mobileLandscape'];
        }

        if ($this->enabledDevices['mobilePortrait']) {

            $breakpointWidthPortrait  = intval($useLocalBreakpoints ? $slider->params->get('responsive-breakpoint-mobile-portrait', ViewSettingsGeneral::defaults['mobile-portrait']) : Settings::get('responsive-screen-width-mobile-portrait', ViewSettingsGeneral::defaults['mobile-portrait']));
            $breakpointWidthLandscape = max($breakpointWidthPortrait, intval($useLocalBreakpoints ? $slider->params->get('responsive-breakpoint-mobile-portrait-landscape', ViewSettingsGeneral::defaults['mobile-landscape']) : Settings::get('responsive-screen-width-mobile-portrait-landscape', ViewSettingsGeneral::defaults['mobile-landscape'])));

            $this->breakpoints[] = array(
                'device'         => 'mobilePortrait',
                'type'           => 'max-screen-width',
                'portraitWidth'  => $breakpointWidthPortrait,
                'landscapeWidth' => $breakpointWidthLandscape
            );


            $editorWidth = intval($slider->params->get('mobile-portrait-width', 320));

            if ($overrideSizeEnabled && $slider->params->get('slider-size-override-mobile-portrait', 0) && $editorWidth > 10) {

                $customHeight = false;
                $editorHeight = intval($slider->params->get('mobile-portrait-height', 568));

                if ($editorWidth > $breakpointWidthPortrait) {
                    if ($editorHeight > 0) {
                        $editorHeight = $breakpointWidthPortrait / $editorWidth * $editorHeight;
                    }

                    $editorWidth = $breakpointWidthPortrait;
                }

                if ($editorHeight <= 0) {
                    $editorHeight = $editorWidth * $heightHelperRatio;
                } else {
                    $customHeight = true;
                }

                $this->sizes['mobilePortrait'] = array(
                    'width'        => $editorWidth,
                    'height'       => floor($editorHeight),
                    'customHeight' => $customHeight
                );
            } else {
                $width = min(320, $smallestWidth, $breakpointWidthPortrait);

                $this->sizes['mobilePortrait'] = array(
                    'width'        => $width,
                    'height'       => floor($width * $heightHelperRatio),
                    'customHeight' => false
                );
            }

            $this->sizes['mobilePortrait']['max'] = max($this->sizes['mobilePortrait']['width'], $breakpointWidthPortrait, $breakpointWidthLandscape);

            $previousSize['min'] = min($previousSize['width'], $breakpointWidthPortrait + 1);

            $previousSize = &$this->sizes['mobilePortrait'];
        }

        $previousSize['min'] = min(320, $previousSize['width']);

        if (isset($this->sizes['mobileLandscape']['auto'])) {
            unset($this->sizes['mobileLandscape']['auto']);

            $this->sizes['mobileLandscape']['width']  = $this->sizes['mobileLandscape']['min'];
            $this->sizes['mobileLandscape']['height'] = floor($this->sizes['mobileLandscape']['width'] * $heightHelperRatio);
        }

        if (isset($this->sizes['tabletPortrait']['auto'])) {
            unset($this->sizes['tabletPortrait']['auto']);

            $this->sizes['tabletPortrait']['width']  = $this->sizes['tabletPortrait']['min'];
            $this->sizes['tabletPortrait']['height'] = floor($this->sizes['tabletPortrait']['width'] * $heightHelperRatio);
        }

        if (isset($this->sizes['tabletLandscape']['auto'])) {
            unset($this->sizes['tabletLandscape']['auto']);

            $this->sizes['tabletLandscape']['width']  = $this->sizes['tabletLandscape']['min'];
            $this->sizes['tabletLandscape']['height'] = floor($this->sizes['tabletLandscape']['width'] * $heightHelperRatio);
        }

        $this->parseLimitSlideWidth($slider->params);

        $breakpointData = array();
        foreach ($this->breakpoints as $breakpoint) {
            $breakpointData[$breakpoint['device']] = $breakpoint;
        }

        if (isset($breakpointData['desktopLandscape'])) {

            $portraitMinWidth  = $breakpointData['desktopLandscape']['portraitWidth'];
            $landscapeMinWidth = $breakpointData['desktopLandscape']['landscapeWidth'];

            if ($portraitMinWidth == $landscapeMinWidth || $this->slider->isFrame) {
                $this->mediaQueries['desktoplandscape'] = array('(min-width: ' . $portraitMinWidth . 'px)');

            } else {
                $this->mediaQueries['desktoplandscape'] = array(
                    '(orientation: landscape) and (min-width: ' . $landscapeMinWidth . 'px)',
                    '(orientation: portrait) and (min-width: ' . $portraitMinWidth . 'px)'
                );
            }
        }

        $nextSize = null;
        foreach (array(
                     'tabletLandscape',
                     'tabletPortrait',
                     'mobileLandscape',
                     'mobilePortrait'
                 ) as $nextDevice) {
            if (isset($breakpointData[$nextDevice])) {
                $nextSize = $breakpointData[$nextDevice];
                break;
            }
        }

        $portraitMaxWidth  = 0;
        $landscapeMaxWidth = 0;
        if (isset($breakpointData['desktopLandscape'])) {
            $portraitMaxWidth  = $breakpointData['desktopLandscape']['portraitWidth'] - 1;
            $landscapeMaxWidth = $breakpointData['desktopLandscape']['landscapeWidth'] - 1;
        }
        $portraitMinWidth  = $nextSize['portraitWidth'] + 1;
        $landscapeMinWidth = $nextSize['landscapeWidth'] + 1;

        if ($portraitMaxWidth == 0 || $landscapeMaxWidth == 0) {
            if ($portraitMinWidth == $landscapeMinWidth || $this->slider->isFrame) {
                $this->mediaQueries['desktopportrait'] = array('(min-width: ' . $portraitMinWidth . 'px)');

            } else {
                $this->mediaQueries['desktopportrait'] = array(
                    '(orientation: landscape) and (min-width: ' . $landscapeMinWidth . 'px)',
                    '(orientation: portrait) and (min-width: ' . $portraitMinWidth . 'px)'
                );
            }
        } else {
            if (($portraitMinWidth == $landscapeMinWidth && $portraitMaxWidth == $landscapeMaxWidth) || $this->slider->isFrame) {
                $this->mediaQueries['desktopportrait'] = array('(min-width: ' . $portraitMinWidth . 'px) and (max-width: ' . $portraitMaxWidth . 'px)');

            } else {
                $this->mediaQueries['desktopportrait'] = array(
                    '(orientation: landscape) and (min-width: ' . $landscapeMinWidth . 'px) and (max-width: ' . $landscapeMaxWidth . 'px)',
                    '(orientation: portrait) and (min-width: ' . $portraitMinWidth . 'px) and (max-width: ' . $portraitMaxWidth . 'px)'
                );
            }
        }


        $this->initMediaQuery($breakpointData, 'tabletLandscape', array(
            'tabletPortrait',
            'mobileLandscape',
            'mobilePortrait'
        ));

        $this->initMediaQuery($breakpointData, 'tabletPortrait', array(
            'mobileLandscape',
            'mobilePortrait'
        ));

        $this->initMediaQuery($breakpointData, 'mobileLandscape', array(
            'mobilePortrait'
        ));

        $this->initMediaQuery($breakpointData, 'mobilePortrait', array());
    }

    private function initMediaQuery(&$breakpointData, $deviceName, $nextDevices) {
        if (isset($breakpointData[$deviceName])) {

            $deviceNameLower = strtolower($deviceName);

            $nextSize = null;
            foreach ($nextDevices as $nextDevice) {
                if (isset($breakpointData[$nextDevice])) {
                    $nextSize = $breakpointData[$nextDevice];
                    break;
                }
            }

            $portraitMaxWidth  = $breakpointData[$deviceName]['portraitWidth'];
            $landscapeMaxWidth = $breakpointData[$deviceName]['landscapeWidth'];

            if ($nextSize) {
                if (($nextSize['portraitWidth'] == $nextSize['landscapeWidth'] && $portraitMaxWidth == $landscapeMaxWidth) || $this->slider->isFrame) {
                    $this->mediaQueries[$deviceNameLower] = array('(max-width: ' . $portraitMaxWidth . 'px) and (min-width: ' . ($nextSize['portraitWidth'] + 1) . 'px)');

                } else {
                    $this->mediaQueries[$deviceNameLower] = array(
                        '(orientation: landscape) and (max-width: ' . $landscapeMaxWidth . 'px) and (min-width: ' . ($nextSize['landscapeWidth'] + 1) . 'px)',
                        '(orientation: portrait) and (max-width: ' . $portraitMaxWidth . 'px) and (min-width: ' . ($nextSize['portraitWidth'] + 1) . 'px)'
                    );
                }
            } else {
                if (($portraitMaxWidth == $landscapeMaxWidth) || $this->slider->isFrame) {
                    $this->mediaQueries[$deviceNameLower] = array('(max-width: ' . $portraitMaxWidth . 'px)');

                } else {
                    $this->mediaQueries[$deviceNameLower] = array(
                        '(orientation: landscape) and (max-width: ' . $landscapeMaxWidth . 'px)',
                        '(orientation: portrait) and (max-width: ' . $portraitMaxWidth . 'px)'
                    );
                }
            }
        }

    }

    public function makeJavaScriptProperties(&$properties) {

        if ($this->maximumSlideWidthLandscape <= 0) {
            $this->maximumSlideWidthLandscape = $this->maximumSlideWidth;
        }

        if ($this->maximumSlideWidthTablet <= 0) {
            $this->maximumSlideWidthTablet = $this->maximumSlideWidth;
        }

        if ($this->maximumSlideWidthTabletLandscape <= 0) {
            $this->maximumSlideWidthTabletLandscape = $this->maximumSlideWidthTablet;
        }

        if ($this->maximumSlideWidthMobile <= 0) {
            $this->maximumSlideWidthMobile = $this->maximumSlideWidth;
        }

        if ($this->maximumSlideWidthMobileLandscape <= 0) {
            $this->maximumSlideWidthMobileLandscape = $this->maximumSlideWidthMobile;
        }

        if (!$this->scaleDown) {
            $this->slider->addDeviceCSS('all', 'div#' . $this->slider->elementId . '-align{min-width:' . $this->sizes['desktopPortrait']['width'] . 'px;}');
        }

        if (!$this->scaleUp) {
            $this->slider->addDeviceCSS('all', 'div#' . $this->slider->elementId . '-align{max-width:' . $this->sizes['desktopPortrait']['width'] . 'px;}');
        }


        if ($this->minimumHeight > 0) {
            $this->slider->sliderType->handleSliderMinHeight($this->minimumHeight);
        }

        foreach ($this->mediaQueries as $device => $mediaQuery) {
            if ($mediaQuery) {
                $this->slider->addDeviceCSS($device, 'div#' . $this->slider->elementId . ' [data-hide-' . $device . '="1"]{display: none !important;}');
            }
        }

        if (!$this->slider->isAdmin) {
            if ($this->hideOnDesktopLandscape) {
                $this->slider->addDeviceCSS('desktoplandscape', '.n2-section-smartslider[data-ssid="' . $this->slider->sliderId . '"]{display: none;}');
            }
            if (!SmartSlider3Info::$forceDesktop && $this->hideOnDesktopPortrait) {
                $this->slider->addDeviceCSS('desktopportrait', '.n2-section-smartslider[data-ssid="' . $this->slider->sliderId . '"]{display: none;}');
            }

            if ($this->hideOnTabletLandscape) {
                $this->slider->addDeviceCSS('tabletlandscape', '.n2-section-smartslider[data-ssid="' . $this->slider->sliderId . '"]{display: none;}');
            }
            if ($this->hideOnTabletPortrait) {
                $this->slider->addDeviceCSS('tabletportrait', '.n2-section-smartslider[data-ssid="' . $this->slider->sliderId . '"]{display: none;}');
            }

            if ($this->hideOnMobileLandscape) {
                $this->slider->addDeviceCSS('mobilelandscape', '.n2-section-smartslider[data-ssid="' . $this->slider->sliderId . '"]{display: none;}');
            }
            if ($this->hideOnMobilePortrait) {
                $this->slider->addDeviceCSS('mobileportrait', '.n2-section-smartslider[data-ssid="' . $this->slider->sliderId . '"]{display: none;}');
            }
        }


        $properties['responsive'] = array(
            'mediaQueries' => $this->mediaQueries,
            'base'         => $this->slider->assets->base,
            'hideOn'       => array(
                'desktopLandscape' => SmartSlider3Info::$forceAllDevices ? false : $this->hideOnDesktopLandscape,
                'desktopPortrait'  => SmartSlider3Info::$forceDesktop ? false : $this->hideOnDesktopPortrait,
                'tabletLandscape'  => SmartSlider3Info::$forceAllDevices ? false : $this->hideOnTabletLandscape,
                'tabletPortrait'   => SmartSlider3Info::$forceAllDevices ? false : $this->hideOnTabletPortrait,
                'mobileLandscape'  => SmartSlider3Info::$forceAllDevices ? false : $this->hideOnMobileLandscape,
                'mobilePortrait'   => SmartSlider3Info::$forceAllDevices ? false : $this->hideOnMobilePortrait,
            ),

            'onResizeEnabled'     => $this->onResizeEnabled,
            'type'                => $this->type,
            'sliderHeightBasedOn' => $this->sliderHeightBasedOn,

            'focusUser' => $this->focusUser,
            'focusEdge' => $this->focusEdge,

            'breakpoints'    => $this->breakpoints,
            'enabledDevices' => $this->enabledDevices,
            'sizes'          => $this->sizes,

            'overflowHiddenPage' => intval($this->slider->params->get('overflow-hidden-page', 0))
        );
    }

    /**
     * @param Data $params
     */
    private function parseLimitSlideWidth($params) {
        if ($params->get('responsiveLimitSlideWidth', 1)) {

            if ($this->enabledDevices['desktopLandscape']) {
                if ($params->get('responsiveSlideWidthDesktopLandscape', 0)) {
                    $this->maximumSlideWidthLandscape = intval($params->get('responsiveSlideWidthMaxDesktopLandscape', 1600));

                    $this->slider->addDeviceCSS('desktoplandscape', 'div#' . $this->slider->elementId . ' .n2-ss-slide-limiter{max-width:' . $this->maximumSlideWidthLandscape . 'px;}');
                }
            }

            if ($params->get('responsiveSlideWidth', 0)) {
                $this->maximumSlideWidth = intval($params->get('responsiveSlideWidthMax', 3000));
            } else {
                $this->maximumSlideWidth = $this->sizes['desktopPortrait']['width'];
            }

            if ($this->maximumSlideWidth < 1) {
                $this->maximumSlideWidth = 10000;
            }

            $this->slider->addDeviceCSS('all', 'div#' . $this->slider->elementId . ' .n2-ss-slide-limiter{max-width:' . $this->maximumSlideWidth . 'px;}');


            if ($this->enabledDevices['tabletLandscape']) {
                if ($params->get('responsiveSlideWidthTabletLandscape', 0)) {
                    $this->maximumSlideWidthTabletLandscape = intval($params->get('responsiveSlideWidthMaxTabletLandscape', 1200));

                    $this->slider->addDeviceCSS('tabletlandscape', 'div#' . $this->slider->elementId . ' .n2-ss-slide-limiter{max-width:' . $this->maximumSlideWidthTabletLandscape . 'px;}');
                }
            }

            if ($params->get('responsiveSlideWidthTablet', 0)) {
                $this->maximumSlideWidthTablet = intval($params->get('responsiveSlideWidthMaxTablet', 980));

                $this->slider->addDeviceCSS('tabletportrait', 'div#' . $this->slider->elementId . ' .n2-ss-slide-limiter{max-width:' . $this->maximumSlideWidthTablet . 'px;}');
            }


            if ($this->enabledDevices['mobileLandscape']) {
                if ($params->get('responsiveSlideWidthMobileLandscape', 0)) {
                    $this->maximumSlideWidthMobileLandscape = intval($params->get('responsiveSlideWidthMaxMobileLandscape', 780));

                    $this->slider->addDeviceCSS('mobilelandscape', 'div#' . $this->slider->elementId . ' .n2-ss-slide-limiter{max-width:' . $this->maximumSlideWidthMobileLandscape . 'px;}');
                }
            }

            if ($params->get('responsiveSlideWidthMobile', 0)) {
                $this->maximumSlideWidthMobile = intval($params->get('responsiveSlideWidthMaxMobile', 480));

                $this->slider->addDeviceCSS('mobileportrait', 'div#' . $this->slider->elementId . ' .n2-ss-slide-limiter{max-width:' . $this->maximumSlideWidthMobile . 'px;}');
            }
        }
    }
}SlideBackground.php000064400000051442152416126700010327 0ustar00<?php


namespace Nextend\SmartSlider3\Slider\Feature;


use Nextend\Framework\Image\ImageEdit;
use Nextend\Framework\Image\ImageManager;
use Nextend\Framework\Parser\Color;
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
use Nextend\Framework\View\Html;
use Nextend\SmartSlider3\Slider\Slide;
use Nextend\SmartSlider3\Slider\Slider;

class SlideBackground {

    /**
     * @var Slider
     */
    private $slider;

    public function __construct($slider) {

        $this->slider = $slider;
    }

    public function makeJavaScriptProperties(&$properties) {
        $enabled = intval($this->slider->params->get('slide-background-parallax', 0));
        if ($enabled) {
            $properties['backgroundParallax'] = array(
                'strength' => intval($this->slider->params->get('slide-background-parallax-strength', 50)) / 100,
                'tablet'   => intval($this->slider->params->get('bg-parallax-tablet', 0)),
                'mobile'   => intval($this->slider->params->get('bg-parallax-mobile', 0))
            );
        }
    }

    /**
     * @param $slide Slide
     *
     * @return string
     */

    public function make($slide) {

        if ($slide->parameters->get('background-type') == '') {
            $slide->parameters->set('background-type', 'color');
            if ($slide->parameters->get('backgroundVideoMp4')) {
                $slide->parameters->set('background-type', 'video');
            } else if ($slide->parameters->get('backgroundImage')) {
                $slide->parameters->set('background-type', 'image');
            }
        }

        return $this->makeBackground($slide);
    }

    private function getBackgroundStyle($slide) {

        $attributes = array();

        $style = '';
        $color = $slide->fill($slide->parameters->get('backgroundColor', ''));
        if (empty($color)) {
            $color = 'ffffff00';
        }
        if (strlen($color) > 0 && $color[0] == '#') {
            $color = substr($color, 1);
            if (strlen($color) == 6) {
                $color .= 'ff';
            }
        }
        $gradient = $slide->parameters->get('backgroundGradient', 'off');

        if ($gradient != 'off') {
            $colorEnd = $slide->fill($slide->parameters->get('backgroundColorEnd', 'ffffff00'));
            if (empty($colorEnd)) {
                $colorEnd = 'ffffff00';
            }

            if ($colorEnd[0] == '#') {
                $colorEnd = substr($colorEnd, 1);
                if (strlen($colorEnd) == 6) {
                    $colorEnd .= 'ff';
                }
            }

            $startColor = Color::colorToRGBA($color);
            $endColor   = Color::colorToRGBA($colorEnd);

            $attributes['data-gradient']    = $gradient;
            $attributes['data-color-start'] = $startColor;
            $attributes['data-color-end']   = $endColor;

            switch ($gradient) {
                case 'horizontal':
                    $style .= 'background:linear-gradient(to right, ' . $startColor . ' 0%,' . $endColor . ' 100%);';
                    break;
                case 'vertical':
                    $style .= 'background:linear-gradient(to bottom, ' . $startColor . ' 0%,' . $endColor . ' 100%);';
                    break;
                case 'diagonal1':
                    $style .= 'background:linear-gradient(45deg, ' . $startColor . ' 0%,' . $endColor . ' 100%);';
                    break;
                case 'diagonal2':
                    $style .= 'background:linear-gradient(135deg, ' . $startColor . ' 0%,' . $endColor . ' 100%);';
                    break;
            }
        } else {
            if (strlen($color) == 8) {

                $colorRGBA = Color::colorToRGBA($color);
                $style     .= "background-color: " . Color::colorToRGBA($color) . ";";

                $attributes['data-color'] = $colorRGBA;


            }
        }

        $attributes['style'] = $style;

        return $attributes;
    }

    private function makeBackground($slide) {

        $backgroundType = $slide->parameters->get('background-type');

        if (empty($backgroundType)) {
            $backgroundVideoMp4 = $slide->parameters->get('backgroundVideoMp4', '');
            $backgroundImage    = $slide->parameters->get('backgroundImage', '');
            if (!empty($backgroundVideoMp4)) {
                $backgroundType = 'video';
            } else if (!empty($backgroundImage)) {
                $backgroundType = 'image';
            } else {
                $backgroundType = 'color';
            }
        }

        $fillMode = $slide->parameters->get('backgroundMode', 'default');

        if ($fillMode == 'default') {
            $fillMode = $this->slider->params->get('backgroundMode', 'fill');

        }

        $backgroundElements = array();

        if ($backgroundType == 'color') {
            $backgroundElements[] = $this->renderColor($slide);

        } else if ($backgroundType == 'video') {


            $backgroundElements[] = $this->renderBackgroundVideo($slide);
            $backgroundElements[] = $this->renderImage($slide, $fillMode);

            $backgroundElements[] = $this->renderColor($slide);

        } else if ($backgroundType == 'image') {


            $backgroundElements[] = $this->renderImage($slide, $fillMode);

            $backgroundElements[] = $this->renderColor($slide);
        }

        $html = implode('', $backgroundElements);

        /* @see https://bugs.chromium.org/p/chromium/issues/detail?id=1181291
         * if (!$slide->getFrontendFirst()) {
         * $html = '<template>' . $html . '</template>';
         * }
         */

        return Html::tag('div', array(
            'class'          => "n2-ss-slide-background",
            'data-public-id' => $slide->publicID,
            'data-mode'      => $fillMode
        ), $html);
    }

    private function renderColor($slide) {
        $backgroundAttributes = $this->getBackgroundStyle($slide);

        if (!empty($backgroundAttributes['style'])) {

            $backgroundAttributes['class'] = 'n2-ss-slide-background-color';

            if ($slide->parameters->get('backgroundColorOverlay', 0)) {
                $backgroundAttributes['data-overlay'] = 1;
            }

            return Html::tag('div', $backgroundAttributes, '');
        }

        return '';
    }

    /**
     * @param $slide Slide
     * @param $fillMode
     *
     * @return string
     */
    private function renderImage($slide, $fillMode) {

        $rawBackgroundImage = $slide->parameters->get('backgroundImage', '');

        if (empty($rawBackgroundImage)) {
            return '';
        }

        $backgroundImageBlur = max(0, $slide->parameters->get('backgroundImageBlur', 0));

        $focusX = max(0, min(100, $slide->fill($slide->parameters->get('backgroundFocusX', 50))));
        $focusY = max(0, min(100, $slide->fill($slide->parameters->get('backgroundFocusY', 50))));

        $backgroundImageMobile        = '';
        $backgroundImageTablet        = '';
        $backgroundImageDesktopRetina = '';
        $backgroundImage              = $slide->fill($rawBackgroundImage);

        if (!$slide->hasGenerator()) {
            $imageData                    = ImageManager::getImageData($backgroundImage);
            $backgroundImageDesktopRetina = $imageData['desktop-retina']['image'];
            $backgroundImageMobile        = $imageData['mobile']['image'];
            $backgroundImageTablet        = $imageData['tablet']['image'];
        }

        $alt   = $slide->fill($slide->parameters->get('backgroundAlt', ''));
        $title = $slide->fill($slide->parameters->get('backgroundTitle', ''));


        $opacity = min(100, max(0, $slide->parameters->get('backgroundImageOpacity', 100)));

        $style = array();
        if ($opacity < 100) {
            $style[] = 'opacity:' . ($opacity / 100);
        }

        if ($focusX != '50') {
            $style[] = '--ss-o-pos-x:' . $focusX . '%';
        }

        if ($focusY != '50') {
            $style[] = '--ss-o-pos-y:' . $focusY . '%';
        }

        $attributes = array(
            "class"        => 'n2-ss-slide-background-image',
            "data-blur"    => $backgroundImageBlur,
            "data-opacity" => $opacity,
            "data-x"       => $focusX,
            "data-y"       => $focusY,
            "data-alt"     => $alt,
            "data-title"   => $title
        );

        if (!empty($style)) {
            $attributes['style'] = implode(';', $style);
        }

        $sources = array();

        if ($this->slider->isAdmin) {
            $src = $backgroundImage;

            $attributes['data-hash']               = md5($src);
            $attributes['data-src-desktop']        = $src;
            $attributes['data-src-desktop-retina'] = $backgroundImageDesktopRetina;
            $attributes['data-src-tablet']         = $backgroundImageTablet;
            $attributes['data-src-mobile']         = $backgroundImageMobile;
        } else {

            if (empty($backgroundImage)) {
                /**
                 * @todo Does it really work as expected?
                 */
                $src = ImageEdit::base64Transparent();
            } else {
                /**
                 * @todo this resize might have a better place
                 */
                $src = $backgroundImage;
                if ($this->slider->params->get('optimize-webp', 0)) {
                    $src = ResourceTranslator::urlToResource($this->slider->features->optimize->optimizeBackground($backgroundImage, $focusX, $focusY));
                }

                $slide->addImage(ResourceTranslator::toUrl($src));
            }

            $hasDeviceSpecificImage = false;

            $mediaQueries = $this->slider->features->responsive->mediaQueries;

            if (!empty($backgroundImageDesktopRetina)) {

                $hasDeviceSpecificImage = true;

                $backgroundImageDesktopRetina = ResourceTranslator::toUrl($backgroundImageDesktopRetina);

                $mediaQueryMinPixelRatio = ' and (-webkit-min-device-pixel-ratio: 1.5)';

                if (!empty($mediaQueries['desktopportrait'])) {
                    $sources[] = HTML::tag('source', Html::addExcludeLazyLoadAttributes(array(
                        'srcset' => $backgroundImageDesktopRetina,
                        'media'  => implode($mediaQueryMinPixelRatio . ',', $mediaQueries['desktopportrait']) . $mediaQueryMinPixelRatio
                    )), false, false);
                }
                if (!empty($mediaQueries['desktoplandscape'])) {
                    $sources[] = HTML::tag('source', Html::addExcludeLazyLoadAttributes(array(
                        'srcset' => $backgroundImageDesktopRetina,
                        'media'  => implode($mediaQueryMinPixelRatio . ',', $mediaQueries['desktoplandscape']) . $mediaQueryMinPixelRatio
                    )), false, false);
                }

            }

            if (!empty($backgroundImageMobile)) {

                $hasDeviceSpecificImage = true;

                $backgroundImageMobileUrl = ResourceTranslator::toUrl($backgroundImageMobile);

                if (!empty($mediaQueries['mobileportrait'])) {
                    $sources[] = HTML::tag('source', Html::addExcludeLazyLoadAttributes(array(
                        'srcset' => $backgroundImageMobileUrl,
                        'media'  => implode(',', $mediaQueries['mobileportrait'])
                    )), false, false);
                }
                if (!empty($mediaQueries['mobilelandscape'])) {
                    $sources[] = HTML::tag('source', Html::addExcludeLazyLoadAttributes(array(
                        'srcset' => $backgroundImageMobileUrl,
                        'media'  => implode(',', $mediaQueries['mobilelandscape'])
                    )), false, false);
                }
            }

            if (!empty($backgroundImageTablet)) {

                $hasDeviceSpecificImage = true;

                $backgroundImageTabletUrl = ResourceTranslator::toUrl($backgroundImageTablet);

                if (!empty($mediaQueries['tabletportrait'])) {
                    $sources[] = HTML::tag('source', Html::addExcludeLazyLoadAttributes(array(
                        'srcset' => $backgroundImageTabletUrl,
                        'media'  => implode(',', $mediaQueries['tabletportrait'])
                    )), false, false);
                }
                if (!empty($mediaQueries['tabletlandscape'])) {
                    $sources[] = HTML::tag('source', Html::addExcludeLazyLoadAttributes(array(
                        'srcset' => $backgroundImageTabletUrl,
                        'media'  => implode(',', $mediaQueries['tabletlandscape'])
                    )), false, false);
                }
            }
            if (!$hasDeviceSpecificImage) {

                $retinaSupport = !!$this->slider->params->get('optimize-slide-width-retina', 0);
                $optimizeScale = $this->slider->params->get('optimize-scale', 0);
                $optimizedData = $this->slider->features->optimize->optimizeImageWebP($backgroundImage, array(
                    'optimize'         => $this->slider->params->get('optimize-webp', 0),
                    'quality'          => intval($this->slider->params->get('optimize-quality', 70)),
                    'resize'           => $optimizeScale,
                    'defaultWidth'     => intval($this->slider->params->get('optimize-slide-width-normal', 1920)),
                    'mediumWidth'      => intval($this->slider->params->get('optimize-slide-width-tablet', 1200)),
                    'mediumHeight'     => intval($this->slider->params->get('optimize-slide-height-tablet', 0)),
                    'smallWidth'       => intval($this->slider->params->get('optimize-slide-width-mobile', 500)),
                    'smallHeight'      => intval($this->slider->params->get('optimize-slide-height-mobile', 0)),
                    'focusX'           => $focusX,
                    'focusY'           => $focusY,
                    'compressOriginal' => $retinaSupport
                ));


                if ($optimizeScale && $retinaSupport) {

                    $webPSrcSet = array();
                    if (isset($optimizedData['small'])) {
                        $slide->addImage($optimizedData['small']['src']);

                        $webPSrcSet[] = $optimizedData['small']['src'] . ' ' . $optimizedData['small']['width'] . 'w';
                    }

                    if (isset($optimizedData['medium'])) {
                        $slide->addImage($optimizedData['medium']['src']);

                        $webPSrcSet[] = $optimizedData['medium']['src'] . ' ' . $optimizedData['medium']['width'] . 'w';
                    }

                    if (isset($optimizedData['normal'])) {
                        $slide->addImage($optimizedData['normal']['src']);
                        $webPSrcSet[] = $optimizedData['normal']['src'] . ' ' . $optimizedData['normal']['width'] . 'w';
                    }

                    if (isset($optimizedData['original'])) {
                        $slide->addImage($optimizedData['original']['src']);
                        $webPSrcSet[] = $optimizedData['original']['src'] . ' ' . $optimizedData['original']['width'] . 'w';
                    }

                    if (!empty($webPSrcSet)) {
                        $sources[] = HTML::tag('source', Html::addExcludeLazyLoadAttributes(array(
                            'srcset' => implode(',', $webPSrcSet),
                            'type'   => 'image/webp'
                        )), false, false);
                    }
                } else {

                    if (isset($optimizedData['small'])) {
                        $slide->addImage($optimizedData['small']['src']);

                        $sources[] = HTML::tag('source', Html::addExcludeLazyLoadAttributes(array(
                            'srcset' => $optimizedData['small']['src'],
                            'type'   => 'image/webp',
                            'media'  => '(max-width: ' . $optimizedData['small']['width'] . 'px)'
                        )), false, false);
                    }

                    if (isset($optimizedData['medium'])) {
                        $slide->addImage($optimizedData['medium']['src']);

                        $sources[] = HTML::tag('source', Html::addExcludeLazyLoadAttributes(array(
                            'srcset' => $optimizedData['medium']['src'],
                            'type'   => 'image/webp',
                            'media'  => '(max-width: ' . $optimizedData['medium']['width'] . 'px)'
                        )), false, false);
                    }

                    if (isset($optimizedData['normal'])) {
                        $slide->addImage($optimizedData['normal']['src']);

                        $sources[] = HTML::tag('source', Html::addExcludeLazyLoadAttributes(array(
                            'srcset' => $optimizedData['normal']['src'],
                            'type'   => 'image/webp'
                        )), false, false);
                    }
                }
            }
        
        }

        $imageAttributes = array(
            'src'     => ResourceTranslator::toUrl($src),
            'alt'     => $alt,
            'title'   => $title,
            'loading' => 'lazy',
            'style'   => ''
        );

        $imageAttributes = Html::addExcludeLazyLoadAttributes($imageAttributes);

        $sources[] = Html::tag('img', $imageAttributes, '', false);

        $picture = HTML::tag('picture', Html::addExcludeLazyLoadAttributes(), implode('', $sources));

        $originalImage = Html::tag('div', $attributes, $picture);

        if ($fillMode === 'blurfit') {
            $slideOption = $slide->parameters->get('backgroundMode', 'default');

            if ($slideOption === 'blurfit') {
                $blurFit = $slide->parameters->get('backgroundBlurFit', 7);
            } else {
                $blurFit                        = $this->slider->params->get('backgroundBlurFit', 7);
                $attributes['data-blurfitmode'] = 'default';
            }
            $picture      = HTML::tag('picture', Html::addExcludeLazyLoadAttributes(array(
                'style' => 'filter:blur(' . $blurFit . 'px)'
            )), implode('', $sources));
            $blurFitStyle = array(
                'margin:-' . ($blurFit * 2) . 'px',
                'padding:' . ($blurFit * 2) . 'px'
            );
            if (!isset($attributes['style'])) {
                $attributes['style'] = '';
            }

            $attributes['data-globalblur'] = $this->slider->params->get('backgroundBlurFit', 7);
            $attributes['data-bgblur']     = $slide->parameters->get('backgroundBlurFit', 7);
            $attributes['style']           = implode(';', $blurFitStyle);
            $ret                           = Html::tag('div', $attributes, $picture) . $originalImage;
        } else {
            $ret = $originalImage;
        }

        return $ret;
    }

    /**
     * @param Slide $slide
     *
     * @return string
     */
    private function renderBackgroundVideo($slide) {
        $mp4 = ResourceTranslator::toUrl($slide->fill($slide->parameters->get('backgroundVideoMp4', '')));

        if (empty($mp4)) {
            return '';
        }

        $sources = '';

        if ($mp4) {
            $sources .= Html::tag("source", array(
                "src"  => $mp4,
                "type" => "video/mp4"
            ), '', false);
        }

        $opacity = min(100, max(0, $slide->parameters->get('backgroundVideoOpacity', 100)));

        $attributes = array(
            'class'              => 'n2-ss-slide-background-video intrinsic-ignore data-tf-not-load',
            'style'              => 'opacity:' . ($opacity / 100) . ';',
            'data-mode'          => $slide->parameters->get('backgroundVideoMode', 'fill'),
            'playsinline'        => 1,
            'webkit-playsinline' => 1,
            'onloadstart'        => 'this.n2LoadStarted=1;',
            'data-keepplaying'   => 1,
            'preload'            => 'none',
            'muted'              => 'muted'
        );

        if ($slide->parameters->get('backgroundVideoLoop', 1)) {
            $attributes['loop'] = 'loop';
        }

        if ($slide->parameters->get('backgroundVideoReset', 1)) {
            $attributes['data-reset-slide-change'] = 1;
        }

        return Html::tag('video', $attributes, $sources);
    

        return '';
    }
}TranslateUrl.php000064400000001306152416127070007702 0ustar00<?php


namespace Nextend\SmartSlider3\Slider\Feature;


use Nextend\Framework\Parser\Common;
use Nextend\Framework\Sanitize;
use Nextend\SmartSlider3\Settings;

class TranslateUrl {

    private $slider;

    public $from = '';

    public $to = '';

    public function __construct($slider) {

        $this->slider = $slider;
        list($this->from, $this->to) = (array)Common::parse(esc_attr(Settings::get('translate-url', '||')));
    }

    public function replaceUrl($string) {

        if (!$this->slider->isAdmin && !empty($this->from) && !empty($this->to)) {
            return str_replace($this->from, $this->to, $string);
        }

        return $string;
    }
}