%PDF- %PDF-
Direktori : /home/lightco1/www/feiss.com.au/plugins/system/jsnframework/libraries/joomlashine/html/ |
Current File : /home/lightco1/www/feiss.com.au/plugins/system/jsnframework/libraries/joomlashine/html/asset.php |
<?php /** * @version $Id$ * @package JSN_Framework * @author JoomlaShine Team <support@joomlashine.com> * @copyright Copyright (C) 2012 JoomlaShine.com. All Rights Reserved. * @license GNU/GPL v2 or later http://www.gnu.org/licenses/gpl-2.0.html * * Websites: http://www.joomlashine.com * Technical Support: Feedback - http://www.joomlashine.com/contact-us/get-support.html */ // No direct access to this file defined('_JEXEC') or die('Restricted access'); /** * Helper class to management asset files * * @package JSN_Framework * @since 1.0.0 */ abstract class JSNHtmlAsset { /** * Contains all namespace that associated with folder path * @var array */ private static $_paths = array(); /** * Contains all dependencies of 3rd-party libraries * @var array */ private static $_dependencies = array(); /** * Javascript modules that call when page load * @var array */ private static $_scriptModules = array(); /** * List of css file and css inline * @var array */ private static $_stylesheets = array(); /** * @var array */ private static $_loadedVersions = array(); /** * @var boolean */ private static $_hasModules = false; /** * Add URL of the CSS file to list that will append to header of webpage * * @param string $url URL of the CSS file * @param string $type Mime type of the file * @param string $media Media type to use * @param array $attributes Attributes use for style tag * * @return void */ public static function addStyle ($url, $type = 'text/css', $media = 'screen', $attributes = array()) { // Add list of file use single call if (is_array($url)) { foreach ($url as $_url) { self::addStyle($_url, $type, $media, $attributes); } return; } if (preg_match('/components\/([^\/]+)\//i', $url, $matches) || preg_match('/modules\/([^\/]+)\//i', $url, $matches)) { $version = self::_getExtensionVersion($matches[1]); } $url .= (strpos($url, '?') === false) ? '?v=' : '&v='; $url .= isset($version) ? $version : '1.0.0'; $url = str_replace('?&', '?', $url); $document = JFactory::getDocument(); $document->addStyleSheet($url, $type, $media, $attributes); } /** * Add inline css to list that will append to header of webpage * * @param string $content CSS content * @param string $type Mime type of the file * * @return void */ public static function addInlineStyle ($content, $type = 'text/css') { $document = JFactory::getDocument(); $document->addStyleDeclaration(trim($content), $type); } /** * Add URL of the Script file to list that will append to header of webpage * * @param string $url URL to the linked script * @param string $type Type of script. Defaults to 'text/javascript' * @param boolean $defer Adds the defer attribute. * @param boolean $async Adds the async attribute. * * @return void */ public static function addScript ($url, $type = "text/javascript", $defer = false, $async = false) { // Add list of file use single call if (is_array($url)) { foreach ($url as $_url) { self::addScript($_url, $type, $defer, $async); } return; } // Prepare jQuery compatibility if (JSNVersion::isJoomlaCompatible('3.2') AND preg_match('#/media/jui/js/jquery(\.min)?\.js$#', $url) AND strpos($url, '?origin=1') === false) { $url = JSN_URL_ASSETS . '/3rd-party/jquery/jquery.min.js'; } if (preg_match('/components\/([^\/]+)\//i', $url, $matches) || preg_match('/modules\/([^\/]+)\//i', $url, $matches)) { $version = self::_getExtensionVersion($matches[1]); } if (isset($version)) { $url .= (strpos($url, '?') === false) ? '?v=' : '&v='; $url .= $version; } $url = str_replace('?&', '?', $url); $document = JFactory::getDocument(); $document->addScript($url, $type, $defer, $async); return; } /** * Add inline script to list that will append to header of webpage * * @param string $content JS content * @param string $type Mime type of the file * * @return void */ public static function addInlineScript ($content, $type = 'text/javascript') { $document = JFactory::getDocument(); $document->addScriptDeclaration($content, $type); return; } /** * Method use to register a javascript library for allow to use * by other script * * @param string $name The identity of library that registered to system * @param string $path Path of the library that located to * @param array $depends List of dependencies required for this library * * @return void */ public static function addScriptLibrary ($name, $path, $depends = array()) { self::addScriptPath($name, $path); self::registerDepends($name, $depends); return; } /** * Register path for requirejs * * @param string $alias Alias name of the path * @param string $path Folder path that associated with namespace * * @return void */ public static function addScriptPath ($alias, $path) { if (is_array($alias) && !self::_isIndexedArray($alias)) { // Loop to each element of array to add it to variable $_paths foreach ($alias as $key => $value) { self::addScriptPath($key, $value); } return; } // Add namespace to associate with a path self::$_paths[$alias] = $path; } /** * Preparing configuration for the extension * * @param string $extension Name of the extension * @param boolean $isAdmin If this parameter is true, alias path will be point to * administrator folder of the extension * @param string $folder Name of the folder that contains extension * * @return void */ public static function prepare ($extension, $isAdmin = true, $folder = '') { // Igrnore prepare for jsnframework if ($extension == 'jsnframework') { return; } $alias = $extension; $path = 'components'; if (strpos($alias, 'com_') !== false) { $alias = substr($extension, 4); } elseif (strpos($alias, 'mod_') !== false) { $path = 'modules'; } else { $path = 'plugins'; $path .= '/' . $folder; $isAdmin = false; } // Remove double slashes while (strpos($path, '//') !== false) { $path = trim(str_replace('//', '/', $path), '/'); } $url = JUri::root(true); if ($isAdmin) { $url .= '/administrator'; } $url .= '/' . $path . '/' . $extension; self::addScriptPath($alias, $url . '/assets/js'); self::addScriptPath($alias . '/3rd', $url . '/assets/3rd-party'); } /** * Register dependencies for 3rd-party libraries that located * outside of the framework * * @param string $name Name of the library * @param array $depends Required libraries from framework to use library * * @return void */ public static function registerDepends ($name, $depends) { // Accept only number indexes array for dependencies list if (!self::_isIndexedArray($depends)) { // Convert to number indexes array $depends = (is_array($depends)) ? array_values($depends) : array($depends); } // Merge with existing dependencies list if (isset(self::$_dependencies[$name]) && is_array(self::$_dependencies[$name])) { $depends = array_merge(self::$_dependencies[$name], $depends); } // Add list to storage variable self::$_dependencies[$name] = $depends; } /** * Register a module with params and dependencies to call list. * Registered modules will call automatic after page loaded * * @param string $module Name of the module that will call * @param mixed $params Parameters when execute the module * @param boolean $inline If value is true, inline javascript code to call a module will be returned * * @return void */ public static function loadScript ($module, $params = array(), $inline = false) { self::$_hasModules = true; if ($inline === true) { return " <script type=\"text/javascript\"> (JoomlaShine = window.JoomlaShine || {}); (!window.jQuery || (JoomlaShine.jQueryBackup = jQuery)); (!JoomlaShine.jQuery || (jQuery = JoomlaShine.jQuery)); require(['{$module}'], function (ModuleObject) { JSNLoadedModules['{$module}'] = new ModuleObject(" . json_encode($params) . "); }); (!window.jQuery || (JoomlaShine.jQuery = jQuery)); (!JoomlaShine.jQueryBackup || (jQuery = JoomlaShine.jQueryBackup)); </script> "; } $module = array( 'module' => $module, 'params' => $params ); $moduleKey = md5(json_encode($module)); // Add module name to call list self::$_scriptModules[$moduleKey] = $module; } /** * Add declaration code of assets to header of webpage. * * @return void */ public static function buildHeader () { if (!self::$_hasModules && !preg_match('/<script([^>]*)>\s*require\(([^<]+)<\/script>/i', JResponse::getBody())) { return ''; } $application = JFactory::getApplication(); $document = JFactory::getDocument(); $component = preg_replace('/^com_/i', '', is_object($application->input) ? $application->input->getCmd('option') : ''); $version = self::_getExtensionVersion(is_object($application->input) ? $application->input->getCmd('option') : ''); $baseUrl = JURI::base(true); $rootUrl = JURI::root(true); // Auto define path for component's modules self::addScriptPath($component, $baseUrl . '/components/com_' . $component . '/assets/js'); self::addScriptPath($component . '/3rd', $baseUrl . '/components/com_' . $component . '/assets/3rd-party'); // Common configuration $env = array( 'rootUrl' => $rootUrl, 'baseUrl' => $baseUrl, 'version' => $version ); if (JSNVersion::isJoomlaCompatible('2.5') AND ! JSNVersion::isJoomlaCompatible('3.0')) { $jquery = "JSNFrameworkUrl + '/3rd-party/jquery/jquery-1.7.1.min.js'"; } elseif (JSNVersion::isJoomlaCompatible('3.2')) { $jquery = "JSNEnv.rootUrl + '/plugins/system/jsnframework/3rd-party/jquery/jquery.min.js'"; } else { $jquery = "JSNEnv.rootUrl + '/media/jui/js/jquery.min.js'"; } $paths = json_encode(self::$_paths); $depends = json_encode(self::$_dependencies); $modules = json_encode(self::$_scriptModules); $language = json_encode(JSNUtilsLanguage::getTranslated(array('JSN_EXTFW_GENERAL_LOADING', 'JSN_EXTFW_GENERAL_CLOSE'))); $html = " <script type=\"text/javascript\" src=\"" . JSN_URL_ASSETS . "/3rd-party/requirejs/require.js\"></script> <script type=\"text/javascript\"> // JoomlaShine script configuration var JSNEnv = " . json_encode($env) . "; var JSNFrameworkUrl = JSNEnv.rootUrl + '/plugins/system/jsnframework/assets'; var JSNModules = {$modules}; var JSNLoadedModules = {}; var JSNCoreLanguage = {$language}; require.config({ urlArgs: 'v=' + JSNEnv.version, baseUrl: JSNFrameworkUrl, paths: {$paths}, shim: {$depends}, waitSeconds: 500 }); define('jquery', ((!window.JoomlaShine || (window.JoomlaShine && !window.JoomlaShine.jQuery)) && !window.jQuery) ? [{$jquery}] : [], function () { (JoomlaShine = window.JoomlaShine || {}); (!JoomlaShine.jQuery || (jQuery = JoomlaShine.jQuery)); return jQuery.noConflict(); }); if (typeof(JSNModules) != 'undefined') { (JoomlaShine = window.JoomlaShine || {}); (!window.jQuery || (JoomlaShine.jQueryBackup = jQuery)); (!JoomlaShine.jQuery || (jQuery = JoomlaShine.jQuery)); for (key in JSNModules) { !function (module, params) { require([module], function (Object) { if (typeof(Object) == 'function') JSNLoadedModules[module] = new Object(params); }); } (JSNModules[key].module, JSNModules[key].params); } (!window.jQuery || (JoomlaShine.jQuery = jQuery)); (!JoomlaShine.jQueryBackup || (jQuery = JoomlaShine.jQueryBackup)); } </script>"; return $html; } /** * This method return true if an array use number system to index values. * * @param array $array Array parameter to check. * * @return boolean */ private static function _isIndexedArray (array $array) { return array_values($array) === $array; } /** * Retrieve the version number of an extension. * * @param string $extension Name of the extension. * * @return void */ private static function _getExtensionVersion($extension) { if ( ! isset(self::$_loadedVersions[$extension])) { // Store extension version self::$_loadedVersions[$extension] = ($version = JSNUtilsText::getConstant('VERSION')) ? $version : '1.0.0'; } return self::$_loadedVersions[$extension]; } /** * Load jquery lib just use for JSN_IMAGESHOW temporarilly. * * @param string $fileName Name of the extension. * * @return void */ public static function jquery($fileName = '') { $jqueryLocation = JSN_URL_ASSETS . '/3rd-party/jquery/'; if ( ! file_exists(JSN_PATH_FRAMEWORK . '/assets/3rd-party/jquery/' . $fileName) OR ! $fileName) { $fileName = 'jquery-1.8.2.js'; } $document = JFactory::getDocument(); $document->addScript($jqueryLocation . $fileName); return; } }