%PDF- %PDF-
Direktori : /home/lightco1/luminero.com.au/libraries/compojoom/html/ |
Current File : /home/lightco1/luminero.com.au/libraries/compojoom/html/html.php |
<?php /** * @package Lib_Compojoom * @author DanielDimitrov <daniel@compojoom.com> * @date 20.08.14 * * @copyright Copyright (C) 2008 - 2013 compojoom.com . All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE */ defined('_JEXEC') or die('Restricted access'); /** * Class CompojoomHtml * * @since 4.0.1 */ class CompojoomHtml { /** * @var array */ private static $queue = array(); /** * @var array */ private static $cssqueue = array(); /** * Holds an internal queue with javascript files * * @param string $key - the key for the storage * @param mixed $scripts - file name or array with filenames * * @return void */ public static function addScriptsToQueue($key, $scripts) { if (is_array($scripts)) { foreach ($scripts as $value) { self::addScriptToQueue($key, $value); } } if (is_string($scripts)) { self::addScriptToQueue($key, $scripts); } } /** * Add a single script to que (if it's not already added) * * @param string $key - the key for the storage * @param mixed $script - file name * * @return void */ private static function addScriptToQueue($key, $script) { if (isset(self::$queue[$key]) && in_array($script, self::$queue[$key])) { return; } self::$queue[$key][] = $script; } /** * Holds an internal queue with css files * * @param string $key - the key for the storage * @param mixed $css - file name or array with filenames * * @return void */ public static function addCSSToQueue($key, $css) { if (is_array($css)) { foreach ($css as $value) { self::addSingleCSSToQueue($key, $value); } } if (is_string($css)) { self::addSingleCSSToQueue($key, $css); } } /** * Add a single script to que (if it's not already added) * * @param string $key - the key for the storage * @param mixed $script - file name * * @return void */ private static function addSingleCSSToQueue($key, $script) { if (isset(self::$cssqueue[$key]) && in_array($script, self::$cssqueue[$key])) { return; } self::$cssqueue[$key][] = $script; } /** * Get the scripts from the queue based on the key * * @param string $key - the key name * * @return mixed */ public static function getScriptQueue($key) { return isset(self::$queue[$key]) ? self::$queue[$key] : array(); } /** * Get the css from the queue based on the key * * @param string $key - the key name * * @return mixed */ public static function getCSSQueue($key) { return isset(self::$cssqueue[$key]) ? self::$cssqueue[$key] : array(); } /** * Ads the specified js files to the head of the page (merges & * minifies them if necessary) * * @param string|array $files - single file or array with file paths * @param string $cachePath - the path to the cache folder * @param bool $minify - should we minify it * @param bool $scriptTag - if set to true outputs the javascript tag directly in the body of the site * * @return void */ public static function script($files, $cachePath, $minify = true, $scriptTag = false) { // If we have a string, then we are dealing with a single file if (is_string($files)) { $files = array($files); } // Check if there are any files if (!count($files)) { return; } $changedSignature = true; $options = array('pathOnly' => true); if (version_compare(JVERSION, '3.7.0', '<')) { $changedSignature = false; } // Let's merge and minify if we need to if ($minify) { $fileName = CompojoomShrink::shrink($files, $cachePath); if ($scriptTag) { if ($changedSignature) { $path = JHtml::script($fileName, $options); } else { $path = JHtml::script($fileName, false, true); } echo '<script data-inline type="text/javascript" src="' . $path . '"></script>' . "\n"; } else { JHtml::script($fileName); } } else { // Output each file from the array as is foreach ($files as $file) { if ($scriptTag) { if ($changedSignature) { $path = JHtml::script($file, $options); } else { $path = JHtml::script($file, false, false, true); } echo '<script data-inline type="text/javascript" src="' . $path . '"></script>' . "\n"; } else { JHtml::script($file); } } } } /** * Ads the specified css files to the head of the page (minifies & joins them if necessary) * * @param string|array $files - single file or array with file paths * @param string $cachePath - the path to the cache folder * @param bool $minify - should we minify it * * @return void */ public static function css($files, $cachePath, $minify = true) { // If we have a string, then we are dealing with a single file if (is_string($files)) { $files = array($files); } // Check if there are any files if (!count($files)) { return; } // Let's merge and minify if we need to if ($minify) { $css = array(); $times = array(); foreach ($files as $file) { if (file_exists(JPATH_ROOT . '/' . $file)) { $times[] = filemtime(JPATH_ROOT . '/' . $file); } } $md5 = md5(json_encode($files)); $url = $cachePath . '/' . $md5 . '.min.css'; $minFile = JPATH_ROOT . '/' . $url; // If the minFile doesn't exist or the minFile time is older than any of the times, let's do our job! if (!file_exists($minFile) || max($times) > filemtime($minFile)) { // TODO Move to autoload require_once JPATH_LIBRARIES . "/compojoom/cssmin/cssmin.php"; // Minify & Join CSS filfes foreach ($files as $file) { $css[] = "/* File: " . $file . " */"; $css[] = CSSMin::minify(file_get_contents(JPATH_ROOT . "/" . $file)); } $mincss = implode("\n", $css); JFile::write($minFile, $mincss); } // Load css file JHtml::stylesheet($url); } else { // Output each file from the array as is foreach ($files as $file) { JHtml::stylesheet($file); } } } /** * Combines minify of css & js (merges & * minifies them if necessary) * * @param string|array $jsfiles - single file or array with file paths * @param string|array $cssfiles - single file or array with file paths * @param string $cachePath - the path to the cache folder * @param bool $minifyJs - should we minify it * @param bool $minifyCss - should we minify it * @param bool $scriptTag - if set to true outputs the javascript tag directly in the body of the site * * @return void */ public static function external($jsfiles, $cssfiles, $cachePath, $minifyJs = true, $minifyCss = true, $scriptTag = false) { self::script($jsfiles, $cachePath, $minifyJs, $scriptTag); self::css($cssfiles, $cachePath, $minifyCss); } /** * Loads the recaptcha v2 url with language in the head * * @param array $params array with additional parameters to hang on the url * * @return void */ public static function recaptcha(array $params = array()) { JHtml::script('https://www.google.com/recaptcha/api.js?hl=' . JFactory::getLanguage()->getTag() . implode('&', $params)); } }