220 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			220 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
 | 
						|
namespace Nextend\SmartSlider3\Renderable\Component;
 | 
						|
 | 
						|
 | 
						|
use Nextend\Framework\ResourceTranslator\ResourceTranslator;
 | 
						|
use Nextend\Framework\View\Html;
 | 
						|
use Nextend\SmartSlider3\Application\Model\ModelSlides;
 | 
						|
use Nextend\SmartSlider3\BackupSlider\ExportSlider;
 | 
						|
use Nextend\SmartSlider3\Renderable\AbstractRenderableOwner;
 | 
						|
use Nextend\SmartSlider3\Renderable\ComponentContainer;
 | 
						|
 | 
						|
class ComponentContent extends AbstractComponent {
 | 
						|
 | 
						|
    protected $type = 'content';
 | 
						|
 | 
						|
    protected $name = 'Content';
 | 
						|
 | 
						|
    protected $colAttributes = array(
 | 
						|
        'class' => 'n2-ss-section-main-content n2-ss-layer-with-background n2-ss-layer-content n2-ow',
 | 
						|
        'style' => ''
 | 
						|
    );
 | 
						|
 | 
						|
    protected $localStyle = array(
 | 
						|
        array(
 | 
						|
            "group"    => "normal",
 | 
						|
            "selector" => '-inner',
 | 
						|
            "css"      => array()
 | 
						|
        ),
 | 
						|
        array(
 | 
						|
            "group"    => "hover",
 | 
						|
            "selector" => '-inner:HOVER',
 | 
						|
            "css"      => array()
 | 
						|
        ),
 | 
						|
    );
 | 
						|
 | 
						|
    public function getPlacement() {
 | 
						|
        return 'default';
 | 
						|
    }
 | 
						|
 | 
						|
    public function __construct($index, $owner, $group, $data) {
 | 
						|
        parent::__construct($index, $owner, $group, $data);
 | 
						|
        $this->container = new ComponentContainer($owner, $this, $data['layers']);
 | 
						|
        $this->data->un_set('layers');
 | 
						|
 | 
						|
        $this->upgradeData();
 | 
						|
 | 
						|
        $this->attributes['style'] = '';
 | 
						|
 | 
						|
 | 
						|
        $devices = $this->owner->getAvailableDevices();
 | 
						|
 | 
						|
        $desktopPortraitSelfAlign = $this->data->get('desktopportraitselfalign', 'inherit');
 | 
						|
 | 
						|
        $desktopportraitInnerAlign = $this->data->get('desktopportraitinneralign', 'inherit');
 | 
						|
 | 
						|
        foreach ($devices as $device) {
 | 
						|
            $padding = $this->data->get($device . 'padding');
 | 
						|
            if (!empty($padding)) {
 | 
						|
                $paddingValues = $this->spacingToPxValue($padding);
 | 
						|
 | 
						|
                $this->style->add($device, '-inner', 'padding:' . implode('px ', $paddingValues) . 'px');
 | 
						|
            }
 | 
						|
 | 
						|
            $maxWidth = intval($this->data->get($device . 'maxwidth', 0));
 | 
						|
            if ($maxWidth > 0) {
 | 
						|
                $this->style->add($device, '', 'max-width: ' . $maxWidth . 'px');
 | 
						|
            }
 | 
						|
 | 
						|
            $innerAlign = $this->data->get($device . 'inneralign', '');
 | 
						|
 | 
						|
            if ($device == 'desktopportrait') {
 | 
						|
                if ($desktopportraitInnerAlign != 'inherit') {
 | 
						|
                    $this->style->add($device, '-inner', AbstractComponent::innerAlignToStyle($innerAlign));
 | 
						|
                }
 | 
						|
            } else if ($desktopportraitInnerAlign != $innerAlign) {
 | 
						|
                $this->style->add($device, '-inner', AbstractComponent::innerAlignToStyle($innerAlign));
 | 
						|
            }
 | 
						|
 | 
						|
 | 
						|
            $selfAlign = $this->data->get($device . 'selfalign', '');
 | 
						|
 | 
						|
            if ($device == 'desktopportrait') {
 | 
						|
                if ($desktopPortraitSelfAlign != 'inherit') {
 | 
						|
                    $this->style->add($device, '', AbstractComponent::selfAlignToStyle($selfAlign));
 | 
						|
                }
 | 
						|
            } else if ($desktopPortraitSelfAlign != $selfAlign) {
 | 
						|
                $this->style->add($device, '', AbstractComponent::selfAlignToStyle($selfAlign));
 | 
						|
            }
 | 
						|
 | 
						|
 | 
						|
            $verticalAlign = $this->data->get($device . 'verticalalign');
 | 
						|
            if (!empty($verticalAlign)) {
 | 
						|
                $this->style->add($device, '-inner', 'justify-content:' . $verticalAlign);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        $this->renderBackground();
 | 
						|
 | 
						|
        $this->placement->attributes($this->attributes);
 | 
						|
 | 
						|
    }
 | 
						|
 | 
						|
    protected function upgradeData() {
 | 
						|
 | 
						|
        if ($this->data->has('verticalalign')) {
 | 
						|
            /**
 | 
						|
             * Upgrade data to device specific
 | 
						|
             */
 | 
						|
            $this->data->set('desktopportraitverticalalign', $this->data->get('verticalalign'));
 | 
						|
            $this->data->un_set('verticalalign');
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    public function render($isAdmin) {
 | 
						|
        if ($this->isRenderAllowed()) {
 | 
						|
            if ($isAdmin || $this->hasBackground || count($this->container->getLayers())) {
 | 
						|
 | 
						|
                $this->runPlugins();
 | 
						|
 | 
						|
                $this->serveLocalStyle();
 | 
						|
                if ($isAdmin) {
 | 
						|
                    $this->admin();
 | 
						|
                }
 | 
						|
 | 
						|
                $this->prepareHTML();
 | 
						|
 | 
						|
                $this->attributes['data-hasbackground'] = $this->hasBackground ? '1' : '0';
 | 
						|
 | 
						|
                $html = Html::tag('div', $this->colAttributes, parent::renderContainer($isAdmin));
 | 
						|
                $html = $this->renderPlugins($html);
 | 
						|
 | 
						|
                return Html::tag('div', $this->attributes, $html);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        return '';
 | 
						|
    }
 | 
						|
 | 
						|
    protected function addUniqueClass($class) {
 | 
						|
        $this->attributes['class']    .= ' ' . $class;
 | 
						|
        $this->colAttributes['class'] .= ' ' . $class . '-inner';
 | 
						|
    }
 | 
						|
 | 
						|
    protected function admin() {
 | 
						|
 | 
						|
 | 
						|
        $this->createDeviceProperty('verticalalign', 'center');
 | 
						|
        $this->createDeviceProperty('inneralign', 'inherit');
 | 
						|
        $this->createDeviceProperty('selfalign', 'center');
 | 
						|
        $this->createDeviceProperty('maxwidth', '0');
 | 
						|
        $this->createDeviceProperty('padding', '10|*|10|*|10|*|10');
 | 
						|
 | 
						|
        $this->createProperty('bgimage', '');
 | 
						|
        $this->createProperty('bgimagex', 50);
 | 
						|
        $this->createProperty('bgimagey', 50);
 | 
						|
 | 
						|
        $this->createColorProperty('bgcolor', true, '00000000');
 | 
						|
        $this->createProperty('bgcolorgradient', 'off');
 | 
						|
        $this->createColorProperty('bgcolorgradientend', true, '00000000');
 | 
						|
        $this->createColorProperty('bgcolor-hover', true);
 | 
						|
        $this->createProperty('bgcolorgradient-hover');
 | 
						|
        $this->createColorProperty('bgcolorgradientend-hover', true);
 | 
						|
 | 
						|
        $this->createProperty('opened', 1);
 | 
						|
 | 
						|
 | 
						|
        $this->createProperty('id', '');
 | 
						|
        $this->createProperty('uniqueclass', '');
 | 
						|
        $this->createProperty('class', '');
 | 
						|
        $this->createProperty('status');
 | 
						|
        $this->createProperty('generatorvisible', '');
 | 
						|
 | 
						|
        $this->placement->adminAttributes($this->attributes);
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
    /**
 | 
						|
     * @param ExportSlider $export
 | 
						|
     * @param array        $layer
 | 
						|
     */
 | 
						|
    public static function prepareExport($export, $layer) {
 | 
						|
        if (!empty($layer['bgimage'])) {
 | 
						|
            $export->addImage($layer['bgimage']);
 | 
						|
        }
 | 
						|
 | 
						|
        $export->prepareLayer($layer['layers']);
 | 
						|
    }
 | 
						|
 | 
						|
    public static function prepareImport($import, &$layer) {
 | 
						|
        if (!empty($layer['bgimage'])) {
 | 
						|
            $layer['bgimage'] = $import->fixImage($layer['bgimage']);
 | 
						|
        }
 | 
						|
 | 
						|
        $import->prepareLayers($layer['layers']);
 | 
						|
    }
 | 
						|
 | 
						|
    public static function prepareSample(&$layer) {
 | 
						|
        if (!empty($layer['bgimage'])) {
 | 
						|
            $layer['bgimage'] = ResourceTranslator::toUrl($layer['bgimage']);
 | 
						|
        }
 | 
						|
 | 
						|
        ModelSlides::prepareSample($layer['layers']);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @param AbstractRenderableOwner $slide
 | 
						|
     * @param array                   $layer
 | 
						|
     */
 | 
						|
    public static function getFilled($slide, &$layer) {
 | 
						|
        AbstractComponent::getFilled($slide, $layer);
 | 
						|
 | 
						|
        if (!empty($layer['bgimage'])) {
 | 
						|
            $layer['bgimage'] = $slide->fill($layer['bgimage']);
 | 
						|
        }
 | 
						|
 | 
						|
        $slide->fillLayers($layer['layers']);
 | 
						|
    }
 | 
						|
} |