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();
 | 
						|
    }
 | 
						|
 | 
						|
} |