* @link http://www.pradosoft.com/ * @copyright Copyright © 2005 PradoSoft * @license http://www.pradosoft.com/license/ * @version $Revision: $ $Date: $ * @package System.Web.UI */ /** * TClientScriptManager class. * * TClientScriptManager manages javascript and CSS stylesheets for a page. * * @author Qiang Xue * @version $Revision: $ $Date: $ * @package System.Web.UI * @since 3.0 */ class TClientScriptManager extends TApplicationComponent { /** * directory containing Prado javascript files */ const SCRIPT_PATH='Web/Javascripts/js'; /** * the PHP script for loading Prado javascript files */ const SCRIPT_LOADER='clientscripts.php'; /** * @var TPage page who owns this manager */ private $_page; /** * @var array registered hidden fields, indexed by hidden field names */ private $_hiddenFields=array(); /** * @var array javascript blocks to be rendered at the beginning of the form */ private $_beginScripts=array(); /** * @var array javascript blocks to be rendered at the end of the form */ private $_endScripts=array(); /** * @var array javascript files to be rendered in the form */ private $_scriptFiles=array(); /** * @var array javascript files to be renderd in page head section */ private $_headScriptFiles=array(); /** * @var array javascript blocks to be renderd in page head section */ private $_headScripts=array(); /** * @var array CSS files */ private $_styleSheetFiles=array(); /** * @var array CSS declarations */ private $_styleSheets=array(); /** * @var array registered PRADO script libraries */ private $_registeredPradoScripts=array(); /** * @var array published PRADO script files */ private $_publishedPradoFiles=array(); /** * Client-side javascript library dependencies * @var array */ private static $_pradoScripts=array( 'prado' => array('prado'), 'effects' => array('prado', 'effects'), 'ajax' => array('prado', 'effects', 'ajax'), 'validator' => array('prado', 'validator'), 'logger' => array('prado', 'logger'), 'datepicker' => array('prado', 'datepicker'), 'rico' => array('prado', 'effects', 'ajax', 'rico'), 'colorpicker' => array('prado', 'colorpicker') ); /** * Constructor. * @param TPage page that owns this client script manager */ public function __construct(TPage $owner) { $this->_page=$owner; } /** * Registers Prado scripts by library name. * Each library may include one or several script files. * Currently, the following libraries are available: * - prado : basic prado js framework * - effects : * - ajax : ajax related js * - validator : validator js * - logger : js logger * - datepicker : datepicker js * - rico : * - colorpicker : colorpicker js * The script files registered will be published. * @param string script library name. */ public function registerPradoScript($name) { $this->registerPradoScriptInternal($name); $params=func_get_args(); $this->_page->registerCachingAction('Page.ClientScript','registerPradoScript',$params); } /** * Registers a prado javascript library to be loaded. */ private function registerPradoScriptInternal($name) { if(!isset($this->_registeredPradoScripts[$name])) { if(isset(self::$_pradoScripts[$name])) $this->_registeredPradoScripts[$name]=true; else throw new TInvalidOperationException('csmanager_pradoscript_invalid',$name); $basePath=Prado::getFrameworkPath().'/'.self::SCRIPT_PATH; foreach(self::$_pradoScripts[$name] as $script) { if(!isset($this->_publishedPradoFiles[$script])) { $this->publishFilePath($basePath.'/'.$script.'.js'); $this->_publishedPradoFiles[$script]=true; } } } } /** * Renders the