154 lines
3.9 KiB
PHP
154 lines
3.9 KiB
PHP
<?php
|
|
|
|
namespace Nextend\SmartSlider3\Renderable;
|
|
|
|
use Nextend\Framework\Font\FontParser;
|
|
use Nextend\Framework\Font\FontRenderer;
|
|
use Nextend\Framework\Style\StyleParser;
|
|
use Nextend\Framework\Style\StyleRenderer;
|
|
use Nextend\SmartSlider3\Slider\FeatureManager;
|
|
|
|
abstract class AbstractRenderable {
|
|
|
|
public $isAdmin = false;
|
|
|
|
public $less = array();
|
|
public $css = array();
|
|
|
|
public $cssDevice = array(
|
|
'all' => array(),
|
|
'desktoplandscape' => array(),
|
|
'desktopportrait' => array(),
|
|
'tabletlandscape' => array(),
|
|
'tabletportrait' => array(),
|
|
'mobilelandscape' => array(),
|
|
'mobileportrait' => array(),
|
|
|
|
);
|
|
|
|
public $elementId = '';
|
|
|
|
public $fontSize = 16;
|
|
|
|
protected $images = array();
|
|
|
|
private $fontCache = array();
|
|
|
|
private $styleCache = array();
|
|
|
|
public $initCallbacks = array();
|
|
public $addedScriptResources = array();
|
|
|
|
/**
|
|
* @var FeatureManager
|
|
*/
|
|
public $features;
|
|
|
|
public function addLess($file, $context) {
|
|
$this->less[$file] = $context;
|
|
}
|
|
|
|
public function addCSS($css) {
|
|
$this->css[] = $css;
|
|
}
|
|
|
|
public function addDeviceCSS($device, $css) {
|
|
$this->cssDevice[$device][] = $css;
|
|
}
|
|
|
|
public function getSelector() {
|
|
|
|
return 'div#' . $this->elementId . ' ';
|
|
}
|
|
|
|
private function _addFontCache($font, $mode, $pre, $fontSize) {
|
|
$cacheKey = md5($font . $mode . $pre . $fontSize);
|
|
if (!isset($this->fontCache[$cacheKey])) {
|
|
$fontData = FontRenderer::render($font, $mode, $pre, $fontSize);
|
|
if ($fontData) {
|
|
$this->addCSS($fontData[1]);
|
|
|
|
$this->fontCache[$cacheKey] = $fontData[0];
|
|
} else {
|
|
$this->fontCache[$cacheKey] = '';
|
|
}
|
|
}
|
|
|
|
return $this->fontCache[$cacheKey];
|
|
}
|
|
|
|
public function addFont($font, $mode, $pre = null) {
|
|
|
|
$font = FontParser::parse($font);
|
|
|
|
if ($this->isAdmin) {
|
|
$fontData = FontRenderer::render($font, $mode, $pre == null ? $this->getSelector() : $pre, $this->fontSize);
|
|
if ($fontData) {
|
|
$this->addCSS($fontData[1]);
|
|
|
|
return $fontData[0];
|
|
}
|
|
|
|
return '';
|
|
}
|
|
|
|
return $this->_addFontCache($font, $mode, $pre == null ? $this->getSelector() : $pre, $this->fontSize);
|
|
}
|
|
|
|
|
|
private function _addStyleCache($style, $mode, $pre) {
|
|
$cacheKey = md5($style . $mode . $pre);
|
|
if (!isset($this->styleCache[$cacheKey])) {
|
|
$styleData = StyleRenderer::render($style, $mode, $pre);
|
|
if ($styleData) {
|
|
$this->addCSS($styleData[1]);
|
|
|
|
$this->styleCache[$cacheKey] = $styleData[0];
|
|
} else {
|
|
$this->styleCache[$cacheKey] = '';
|
|
}
|
|
}
|
|
|
|
return $this->styleCache[$cacheKey];
|
|
}
|
|
|
|
public function addStyle($style, $mode, $pre = null) {
|
|
|
|
$style = StyleParser::parse($style);
|
|
|
|
if ($this->isAdmin) {
|
|
$styleData = StyleRenderer::render($style, $mode, $pre == null ? $this->getSelector() : $pre);
|
|
if ($styleData) {
|
|
$this->addCSS($styleData[1]);
|
|
|
|
return $styleData[0];
|
|
}
|
|
|
|
return '';
|
|
}
|
|
|
|
return $this->_addStyleCache($style, $mode, $pre == null ? $this->getSelector() : $pre);
|
|
}
|
|
|
|
public function addScript($script, $name = false) {
|
|
if ($name !== false) {
|
|
$this->addedScriptResources[] = $name;
|
|
}
|
|
$this->initCallbacks[] = $script;
|
|
|
|
}
|
|
|
|
public function isScriptAdded($name) {
|
|
return in_array($name, $this->addedScriptResources);
|
|
}
|
|
|
|
public function addImage($imageUrl) {
|
|
$this->images[] = $imageUrl;
|
|
}
|
|
|
|
public function getImages() {
|
|
return $this->images;
|
|
}
|
|
|
|
public abstract function render();
|
|
} |