203 lines
4.8 KiB
PHP
203 lines
4.8 KiB
PHP
|
<?php
|
||
|
|
||
|
namespace Nextend\Framework\Asset;
|
||
|
|
||
|
use Nextend\Framework\Data\Data;
|
||
|
use Nextend\Framework\PageFlow;
|
||
|
use Nextend\Framework\Plugin;
|
||
|
use Nextend\Framework\View\Html;
|
||
|
|
||
|
/**
|
||
|
* Class Manager
|
||
|
*
|
||
|
*/
|
||
|
class AssetManager {
|
||
|
|
||
|
/**
|
||
|
* Helper to safely store AssetManager related optimization data
|
||
|
*
|
||
|
* @var Data
|
||
|
*/
|
||
|
public static $stateStorage;
|
||
|
|
||
|
/**
|
||
|
* @var CSS\Asset
|
||
|
*/
|
||
|
public static $css;
|
||
|
|
||
|
private static $cssStack = array();
|
||
|
|
||
|
/**
|
||
|
* @var Css\Less\Asset
|
||
|
*/
|
||
|
public static $less;
|
||
|
|
||
|
private static $lessStack = array();
|
||
|
|
||
|
/**
|
||
|
* @var Js\Asset
|
||
|
*/
|
||
|
public static $js;
|
||
|
|
||
|
private static $jsStack = array();
|
||
|
|
||
|
/**
|
||
|
* @var Fonts\Google\Asset
|
||
|
*/
|
||
|
public static $googleFonts;
|
||
|
|
||
|
/**
|
||
|
* @var Image\Asset
|
||
|
*/
|
||
|
public static $image;
|
||
|
|
||
|
private static $imageStack = array();
|
||
|
|
||
|
private static $googleFontsStack = array();
|
||
|
|
||
|
public static $cacheAll = true;
|
||
|
|
||
|
public static $cachedGroups = array();
|
||
|
|
||
|
public static function getInstance() {
|
||
|
static $instance = null;
|
||
|
if (null === $instance) {
|
||
|
$instance = new self();
|
||
|
self::createStack();
|
||
|
|
||
|
Plugin::doAction('n2_assets_manager_started');
|
||
|
}
|
||
|
|
||
|
return $instance;
|
||
|
}
|
||
|
|
||
|
public static function createStack() {
|
||
|
|
||
|
self::$stateStorage = new Data();
|
||
|
|
||
|
self::$css = new Css\Asset();
|
||
|
array_unshift(self::$cssStack, self::$css);
|
||
|
|
||
|
self::$less = new Css\Less\Asset();
|
||
|
array_unshift(self::$lessStack, self::$less);
|
||
|
|
||
|
self::$js = new Js\Asset();
|
||
|
array_unshift(self::$jsStack, self::$js);
|
||
|
|
||
|
self::$googleFonts = new Fonts\Google\Asset();
|
||
|
array_unshift(self::$googleFontsStack, self::$googleFonts);
|
||
|
|
||
|
self::$image = new Image\Asset();
|
||
|
array_unshift(self::$imageStack, self::$image);
|
||
|
}
|
||
|
|
||
|
public static function removeStack() {
|
||
|
if (count(self::$cssStack) > 0) {
|
||
|
|
||
|
self::$stateStorage = new Data();
|
||
|
|
||
|
/**
|
||
|
* @var $previousCSS Css\Asset
|
||
|
* @var $previousLESS Css\Less\Asset
|
||
|
* @var $previousJS Js\Asset
|
||
|
* @var $previousGoogleFons Fonts\Google\Asset
|
||
|
* @var $previousImage Image\Asset
|
||
|
*/
|
||
|
$previousCSS = array_shift(self::$cssStack);
|
||
|
self::$css = self::$cssStack[0];
|
||
|
|
||
|
$previousLESS = array_shift(self::$lessStack);
|
||
|
self::$less = self::$lessStack[0];
|
||
|
|
||
|
$previousJS = array_shift(self::$jsStack);
|
||
|
self::$js = self::$jsStack[0];
|
||
|
|
||
|
$previousGoogleFons = array_shift(self::$googleFontsStack);
|
||
|
self::$googleFonts = self::$googleFontsStack[0];
|
||
|
|
||
|
$previousImage = array_shift(self::$imageStack);
|
||
|
self::$image = self::$imageStack[0];
|
||
|
|
||
|
return array(
|
||
|
'css' => $previousCSS->serialize(),
|
||
|
'less' => $previousLESS->serialize(),
|
||
|
'js' => $previousJS->serialize(),
|
||
|
'googleFonts' => $previousGoogleFons->serialize(),
|
||
|
'image' => $previousImage->serialize()
|
||
|
);
|
||
|
}
|
||
|
|
||
|
echo "Too much remove stack on the asset manager...";
|
||
|
PageFlow::exitApplication();
|
||
|
|
||
|
}
|
||
|
|
||
|
public static function enableCacheAll() {
|
||
|
self::$cacheAll = true;
|
||
|
}
|
||
|
|
||
|
public static function disableCacheAll() {
|
||
|
self::$cacheAll = false;
|
||
|
}
|
||
|
|
||
|
public static function addCachedGroup($group) {
|
||
|
if (!in_array($group, self::$cachedGroups)) {
|
||
|
self::$cachedGroups[] = $group;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public static function loadFromArray($array) {
|
||
|
|
||
|
self::$css->unSerialize($array['css']);
|
||
|
self::$less->unSerialize($array['less']);
|
||
|
self::$js->unSerialize($array['js']);
|
||
|
self::$googleFonts->unSerialize($array['googleFonts']);
|
||
|
self::$image->unSerialize($array['image']);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param $path
|
||
|
*
|
||
|
* @return array|string contains already escaped data
|
||
|
*/
|
||
|
public static function getCSS($path = false) {
|
||
|
if (self::$css) {
|
||
|
if ($path) {
|
||
|
return self::$css->get();
|
||
|
}
|
||
|
|
||
|
return self::$css->getOutput();
|
||
|
}
|
||
|
|
||
|
return '';
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param $path
|
||
|
*
|
||
|
* @return array|string contains already escaped data
|
||
|
*/
|
||
|
public static function getJs($path = false) {
|
||
|
if (self::$js) {
|
||
|
if ($path) {
|
||
|
return self::$js->get();
|
||
|
}
|
||
|
|
||
|
return self::$js->getOutput();
|
||
|
}
|
||
|
|
||
|
return '';
|
||
|
}
|
||
|
|
||
|
public static function generateAjaxCSS() {
|
||
|
|
||
|
return Html::style(self::$css->getAjaxOutput());
|
||
|
}
|
||
|
|
||
|
|
||
|
public static function generateAjaxJS() {
|
||
|
|
||
|
return self::$js->getAjaxOutput();
|
||
|
}
|
||
|
|
||
|
}
|