<?php /** * TClientScript class file * * @author Wei Zhuo <weizhuo[at]gmail[dot]com> * @link http://www.pradosoft.com/ * @copyright Copyright © 2005-2008 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, * * <code> * <com:TClientScript PradoScripts="effects, rico" /> * </code> * * Custom javascript files can be register using the {@link setScriptUrl ScriptUrl} * property. * <code> * <com:TClientScript ScriptUrl=<%~ test.js %> /> * </code> * * Contents within TClientScript will be treated as javascript code and will be * rendered in place. * * @author Wei Zhuo <weizhuo[at]gmail[dot]com> * @version $Id$ * @package System.Web.UI.WebControls * @since 3.0 */ class TClientScript extends TControl { /** * @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, ''); } /** * 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->renderCustomScript($writer); } /** * Renders the custom script file. * @param THtmLWriter the renderer */ protected function renderCustomScriptFile($writer) { if(($scriptUrl = $this->getScriptUrl())!=='') $writer->write("<script type=\"text/javascript\" src=\"$scriptUrl\"></script>\n"); } /** * Registers the body content as javascript. * @param THtmlWriter the renderer */ protected function renderCustomScript($writer) { if($this->getHasControls()) { $writer->write("<script type=\"text/javascript\">\n/*<![CDATA[*/\n"); $this->renderChildren($writer); $writer->write("\n/*]]>*/\n</script>\n"); } } }