* @link http://www.pradosoft.com/ * @copyright Copyright © 2005 PradoSoft * @license http://www.pradosoft.com/license/ * @version $Id$ * @package System.Web.UI.WebControls */ /** * TClientScript class * * Allows importing of Prado Client Scripts from template via the * {@link setPradoScripts PradoScripts} property. Multiple Prado * client-scripts can be specified using comma delimited string of the * javascript library to include on the page. For example, * * * * * * Custom javascript files can be register using the {@link setScriptUrl ScriptUrl} * property. * * /> * * * Contents within TClientScript will be treated as javascript code and will be * rendered in place. * * @author Wei Zhuo * @version $Id$ * @package System.Web.UI.WebControls * @since 3.0 */ class TClientScript extends TControl { const SCRIPT_LOADER = 'Web/Javascripts/clientscripts.php'; /** * @return string comma delimited list of javascript libraries to included * on the page. */ public function getPradoScripts() { return $this->getViewState('PradoScripts', ''); } /** * Include javascript library to the current page. The current supported * libraries are: "prado", "effects", "ajax", "validator", "logger", * "datepicker", "colorpicker". Library dependencies are automatically resolved. * * @param string comma delimited list of javascript libraries to include. */ public function setPradoScripts($value) { $this->setViewState('PradoScripts', $value, ''); } /** * @return string custom javascript file url. */ public function getScriptUrl() { return $this->getViewState('ScriptUrl', ''); } /** * @param string custom javascript file url. */ public function setScriptUrl($value) { $this->setViewState('ScriptUrl', $value, ''); } /** * @param string custom javascript library directory. */ public function setPackagePath($value) { $this->setViewState('PackagePath', $value); } /** * @return string custom javascript library directory. */ public function getPackagePath() { return $this->getViewState('PackagePath'); } /** * @param string load specific packages from the javascript library in the PackagePath, comma delimited package names */ public function setPackageScripts($value) { $this->setViewState('PackageScripts', $value,''); } /** * @return string comma delimited list of javascript library packages to load. */ public function getPackageScripts() { return $this->getViewState('PackageScripts',''); } /** * Calls the client script manager to add each of the requested client * script libraries. * @param mixed event parameter */ public function onPreRender($param) { parent::onPreRender($param); $scripts = preg_split('/,|\s+/', $this->getPradoScripts()); $cs = $this->getPage()->getClientScript(); foreach($scripts as $script) { if(($script = trim($script))!=='') $cs->registerPradoScript($script); } } /** * Renders the body content as javascript block. * Overrides parent implementation, parent renderChildren method is called during * {@link registerCustomScript}. * @param THtmlWriter the renderer */ public function render($writer) { $this->renderCustomScriptFile($writer); $this->renderPackageScriptFile($writer); $this->renderCustomScript($writer); } /** * Renders the custom script file. * @param THtmLWriter the renderer */ protected function renderCustomScriptFile($writer) { if(($scriptUrl = $this->getScriptUrl())!=='') $writer->write("\n"); } /** * Registers the body content as javascript. * @param THtmlWriter the renderer */ protected function renderCustomScript($writer) { if($this->getHasControls()) { $writer->write("\n"); } } protected function renderPackageScriptFile($writer) { $baseUrl = $this->publishScriptLoader(); $scripts = split('/\s*[, ]+\s*/', $this->getPackageScripts()); $url = $baseUrl . '?js=' . implode(',', $scripts); if($this->getApplication()->getMode()===TApplicationMode::Debug) $url.='&mode=debug'; $writer->write("\n"); } protected function publishScriptLoader() { list($path, $url) = $this->getPublishedPackagePath(); if(is_dir($path)) { $scriptLoader = Prado::getFrameworkPath().'/'.self::SCRIPT_LOADER; $scriptLoaderFile = basename($scriptLoader); $dest = $path.'/'.$scriptLoaderFile; if(!is_file($dest)) copy($scriptLoader,$dest); return $url.'/'.$scriptLoaderFile; } else throw new TConfigurationException('clientscript_invalid_package_path', $this->getPackagePath(), $this->getUniqueID()); } protected function getPublishedPackagePath() { $assets = $this->getApplication()->getAssetManager(); //assumes dot path first $dir = Prado::getPathOfNameSpace($packageDir); if(!is_null($dir)) { $url = $assets->publishFilePath($dir); //show throw an excemption if invalid return array($dir, $url); } $url = $this->getPackagePath(); $packageDir = str_replace($assets->getBaseUrl(), '', $url); return array($assets->getBasePath().$packageDir,$url); } } ?>