From 61bb16ee2e5f0a66234e1575242169a10fde47b5 Mon Sep 17 00:00:00 2001 From: xue <> Date: Fri, 7 Jul 2006 14:54:15 +0000 Subject: Merge from 3.0 branch till 1253. --- framework/Web/UI/WebControls/TClientScript.php | 128 ++++++------------------- 1 file changed, 30 insertions(+), 98 deletions(-) (limited to 'framework/Web/UI/WebControls/TClientScript.php') diff --git a/framework/Web/UI/WebControls/TClientScript.php b/framework/Web/UI/WebControls/TClientScript.php index 79279a93..88f7f7d4 100644 --- a/framework/Web/UI/WebControls/TClientScript.php +++ b/framework/Web/UI/WebControls/TClientScript.php @@ -14,19 +14,14 @@ * TClientScript class * * Allows importing of Prado Client Scripts from template via the - * {@link setUsingPradoScripts UsingPradoScripts} property. Multiple Prado + * {@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, * * - * + * * * - * The {@link setPreRenderControlTypes PreRenderControlTypes} property can - * be used to specify that controls type/class names that should pre-render itself - * even though they may not be rendered on the page. This is useful to publish - * controls that require assets and is only visible after a callback response. - * * Custom javascript files can be register using the {@link setScriptUrl ScriptUrl} * property. * @@ -34,17 +29,12 @@ * * * Contents within TClientScript will be treated as javascript code and will be - * rendered. - * - * The {@link setScriptPosition ScriptPosition} property specifies where the script - * will be rendered. The allows values of {@link setScriptPosition ScriptPosition} are + * rendered in place. * - * - Head -- renders the script within the <head> - * - Begin -- renders the script within and near the begining of TForm - * - Here -- renders the script inplace, this is the default - * - End -- renders the script within and near the end of TForm - * - * TODO: Allow binding expressions inside scripts + * The {@link setPreRenderControlTypes PreRenderControlTypes} property can + * be used to specify that controls type/class names that should pre-render itself + * even though they may not be rendered on the page. This is useful to publish + * controls that require assets and is only visible after a callback response. * * @author Wei Zhuo * @version $Revision: $ $Date: $ @@ -53,16 +43,11 @@ */ class TClientScript extends TControl { - /** - * @var string body contents - */ - private $_content = ''; - /** * @return string comma delimited list of javascript libraries to included * on the page. */ - public function getUsingPradoScripts() + public function getPradoScripts() { return $this->getViewState('PradoScripts', ''); } @@ -75,7 +60,7 @@ class TClientScript extends TControl * * @param string comma delimited list of javascript libraries to include. */ - public function setUsingPradoScripts($value) + public function setPradoScripts($value) { $this->setViewState('PradoScripts', $value, ''); } @@ -113,25 +98,6 @@ class TClientScript extends TControl return $this->getViewState('PreRenderControls', ''); } - /** - * @return string position the script should be rendered, default is 'Here'. - */ - public function getScriptPosition() - { - return $this->getViewState('ScriptPosition', 'Here'); - } - - /** - * Sets the position where the script will be rendered. - * The allow positions are 'Head', 'Begin', 'Here', and 'End', default is 'Here'. - * @param string script position 'Head', 'Begin', 'Here' or 'End'. - */ - public function setScriptPosition($value) - { - $this->setViewState('ScriptPosition', - TPropertyValue::ensureEnum($value, 'Head', 'Begin', 'Here', 'End'), 'Here'); - } - /** * Calls the client script manager to add each of the requested client * script libraries. @@ -140,50 +106,16 @@ class TClientScript extends TControl public function onPreRender($param) { parent::onPreRender($param); - $scripts = preg_split('/,|\s+/', $this->getUsingPradoScripts()); + $scripts = preg_split('/,|\s+/', $this->getPradoScripts()); $cs = $this->getPage()->getClientScript(); foreach($scripts as $script) { - $script = trim($script); - if(strlen($script) > 0) + if(($script = trim($script))!=='') $cs->registerPradoScript($script); } - if($this->getEnabled(true)) - { - $this->registerCustomScriptFile(); - $this->registerCustomScript(); - } $this->preRenderControls($param); } - /** - * Registers the custom script file. - */ - protected function registerCustomScriptFile() - { - $scriptUrl = $this->getScriptUrl(); - if(strlen($scriptUrl)) - { - $position = $this->getScriptPosition(); - $cs = $this->getPage()->getClientScript(); - switch($this->getScriptPosition()) - { - case 'Head': - $cs->registerHeadScriptFile($scriptUrl, $scriptUrl); - break; - case 'Begin': - $cs->registerScriptFile($scriptUrl, $scriptUrl); - break; - case 'Here': - $this->_content .= TJavascript::renderScriptFile($scriptUrl); - break; - default : - throw new TConfigurationException('clientscript_invalid_file_position', - $this->getID(), $position); - } - } - } - /** * Renders the body content as javascript block. * Overrides parent implementation, parent renderChildren method is called during @@ -192,31 +124,31 @@ class TClientScript extends TControl */ public function render($writer) { - if($this->getEnabled(true) && strlen($this->_content) > 0) - $writer->write($this->_content); + $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("\n"); } /** - * Registers the body content as scripts at specific locations. Calls - * {@link parent::renderChildren} to capture the body contents. + * Registers the body content as javascript. + * @param THtmlWriter the renderer */ - protected function registerCustomScript() + protected function renderCustomScript($writer) { - $textWriter=new TTextWriter; - $this->renderChildren(new THtmlWriter($textWriter)); - $script=$textWriter->flush(); - if(strlen($script)>0) + if($this->getHasControls()) { - $cs = $this->getPage()->getClientScript(); - $position = $this->getScriptPosition(); - if($position == 'Here') - $this->_content .= TJavaScript::renderScriptBlock($script); - else - { - $key = sprintf('%08X', crc32($script)); - $method = 'register'.$position.'Script'; - $cs->{$method}($key, $script); - } + $writer->write("\n"); } } -- cgit v1.2.3