diff options
Diffstat (limited to 'framework/Web/UI/TClientScriptManager.php')
-rw-r--r-- | framework/Web/UI/TClientScriptManager.php | 183 |
1 files changed, 25 insertions, 158 deletions
diff --git a/framework/Web/UI/TClientScriptManager.php b/framework/Web/UI/TClientScriptManager.php index 064ab34f..015ef1c1 100644 --- a/framework/Web/UI/TClientScriptManager.php +++ b/framework/Web/UI/TClientScriptManager.php @@ -1,6 +1,6 @@ <?php /** - * TClientScriptManager and TClientSideOptions class file. + * TClientScriptManager class file * * @author Qiang Xue <qiang.xue@gmail.com> * @link http://www.pradosoft.com/ @@ -116,15 +116,6 @@ class TClientScriptManager extends TApplicationComponent */ public function registerPradoScript($name) { - $this->registerPradoScriptInternal($name); - - $params=func_get_args(); - foreach($this->_page->getCachingStack() as $item) - $item->registerAction('Page.ClientScript','registerPradoScript',$params); - } - - private function registerPradoScriptInternal($name) - { if(!isset($this->_registeredPradoScripts[$name])) { $this->_registeredPradoScripts[$name]=true; @@ -164,21 +155,6 @@ class TClientScriptManager extends TApplicationComponent } } - public function getCallbackReference($callbackHandler, $options=null) - { - $options = !is_array($options) ? array() : $options; - $class = new TReflectionClass($callbackHandler); - if($class->hasMethod('getClientSide')) - { - $clientSide = $callbackHandler->getClientSide(); - $options = array_merge($options, $clientSide->getOptions()->toArray()); - } - $optionString = TJavascript::encode($options); - $this->registerPradoScriptInternal('ajax'); - $id = $callbackHandler->getUniqueID(); - return "new Prado.CallbackRequest('{$id}',{$optionString})"; - } - /** * Registers postback javascript for a control. * @param string javascript class responsible for the control being registered for postback @@ -186,63 +162,51 @@ class TClientScriptManager extends TApplicationComponent */ public function registerPostBackControl($jsClass,$options) { - if(!isset($options['FormID']) && ($form=$this->_page->getForm())!==null) - $options['FormID']=$form->getClientID(); + if(!isset($options['FormID'])) + $options['FormID']=$this->_page->getForm()->getClientID(); $optionString=TJavaScript::encode($options); $code="new $jsClass($optionString);"; + $this->registerEndScript(sprintf('%08X', crc32($code)), $code); - $this->_endScripts[sprintf('%08X', crc32($code))]=$code; - $this->_hiddenFields[TPage::FIELD_POSTBACK_TARGET]=''; - $this->_hiddenFields[TPage::FIELD_POSTBACK_PARAMETER]=''; - $this->registerPradoScriptInternal('prado'); + $this->registerHiddenField(TPage::FIELD_POSTBACK_TARGET,''); + $this->registerHiddenField(TPage::FIELD_POSTBACK_PARAMETER,''); - $params=func_get_args(); - foreach($this->_page->getCachingStack() as $item) - $item->registerAction('Page.ClientScript','registerPostBackControl',$params); + $this->registerPradoScript('prado'); } /** * Register a default button to panel. When the $panel is in focus and * the 'enter' key is pressed, the $button will be clicked. - * @param string client ID of the container object - * @param string client ID of the button + * @param TControl panel to register the default button action + * @param TControl button to trigger a postback */ - public function registerDefaultButton($containerID, $buttonID) + public function registerDefaultButton($panel, $button) { - $options = TJavaScript::encode($this->getDefaultButtonOptions($containerID, $buttonID)); + $options = TJavaScript::encode($this->getDefaultButtonOptions($panel, $button)); $code = "new Prado.WebUI.DefaultButton($options);"; - - $this->_endScripts['prado:'.$containerID]=$code; - $this->registerPradoScriptInternal('prado'); - - $params=func_get_args(); - foreach($this->_page->getCachingStack() as $item) - $item->registerAction('Page.ClientScript','registerDefaultButton',$params); + $this->registerEndScript("prado:".$panel->getClientID(), $code); + $this->registerPradoScript('prado'); } /** * Registers the control to receive default focus. - * @param string the client ID of the control to receive default focus + * @param TControl|string the control or the client ID of the HTML element to receive default focus */ public function registerFocusControl($target) { - $this->registerPradoScriptInternal('prado'); - $this->_endScripts['prado:focus']='Prado.Focus.setFocus("'.TJavaScript::quoteString($target).'");'; - - $params=func_get_args(); - foreach($this->_page->getCachingStack() as $item) - $item->registerAction('Page.ClientScript','registerFocusControl',$params); + $this->registerPradoScript('prado'); + if($target instanceof TControl) + $target=$target->getClientID(); + $this->registerEndScript('prado:focus','Prado.Focus.setFocus("'.TJavaScript::quoteString($target).'");'); } /** - * @param string client ID of the container object - * @param string client ID of the button * @return array default button options. */ - protected function getDefaultButtonOptions($containerID, $buttonID) + protected function getDefaultButtonOptions($panel, $button) { - $options['Panel'] = $containerID; - $options['Target'] = $buttonID; + $options['Panel'] = $panel->getClientID(); + $options['Target'] = $button->getClientID(); $options['Event'] = 'click'; return $options; } @@ -255,10 +219,6 @@ class TClientScriptManager extends TApplicationComponent public function registerStyleSheetFile($key,$url) { $this->_styleSheetFiles[$key]=$url; - - $params=func_get_args(); - foreach($this->_page->getCachingStack() as $item) - $item->registerAction('Page.ClientScript','registerStyleSheetFile',$params); } /** @@ -269,10 +229,6 @@ class TClientScriptManager extends TApplicationComponent public function registerStyleSheet($key,$css) { $this->_styleSheets[$key]=$css; - - $params=func_get_args(); - foreach($this->_page->getCachingStack() as $item) - $item->registerAction('Page.ClientScript','registerStyleSheet',$params); } /** @@ -283,10 +239,6 @@ class TClientScriptManager extends TApplicationComponent public function registerHeadScriptFile($key,$url) { $this->_headScriptFiles[$key]=$url; - - $params=func_get_args(); - foreach($this->_page->getCachingStack() as $item) - $item->registerAction('Page.ClientScript','registerHeadScriptFile',$params); } /** @@ -297,10 +249,6 @@ class TClientScriptManager extends TApplicationComponent public function registerHeadScript($key,$script) { $this->_headScripts[$key]=$script; - - $params=func_get_args(); - foreach($this->_page->getCachingStack() as $item) - $item->registerAction('Page.ClientScript','registerHeadScript',$params); } /** @@ -310,11 +258,8 @@ class TClientScriptManager extends TApplicationComponent */ public function registerScriptFile($key,$url) { - $this->_scriptFiles[$key]=$url; - - $params=func_get_args(); - foreach($this->_page->getCachingStack() as $item) - $item->registerAction('Page.ClientScript','registerScriptFile',$params); + if(!isset($this->_scriptFiles[$key])) + $this->_scriptFiles[$key]=$url; } /** @@ -325,10 +270,6 @@ class TClientScriptManager extends TApplicationComponent public function registerBeginScript($key,$script) { $this->_beginScripts[$key]=$script; - - $params=func_get_args(); - foreach($this->_page->getCachingStack() as $item) - $item->registerAction('Page.ClientScript','registerBeginScript',$params); } /** @@ -339,10 +280,6 @@ class TClientScriptManager extends TApplicationComponent public function registerEndScript($key,$script) { $this->_endScripts[$key]=$script; - - $params=func_get_args(); - foreach($this->_page->getCachingStack() as $item) - $item->registerAction('Page.ClientScript','registerEndScript',$params); } /** @@ -353,11 +290,8 @@ class TClientScriptManager extends TApplicationComponent */ public function registerHiddenField($name,$value) { - $this->_hiddenFields[$name]=$value; - - $params=func_get_args(); - foreach($this->_page->getCachingStack() as $item) - $item->registerAction('Page.ClientScript','registerHiddenField',$params); + if(!isset($this->_hiddenFields[$name])) + $this->_hiddenFields[$name]=$value; } /** @@ -532,71 +466,4 @@ class TClientScriptManager extends TApplicationComponent } } -/** - * TClientSideOptions abstract class. - * - * TClientSideOptions manages client-side options for components that have - * common client-side javascript behaviours and client-side events such as - * between ActiveControls and validators. - * - * @author <weizhuo[at]gmail[dot]com> - * @version $Revision: $ $Date: $ - * @package System.Web.UI - * @since 3.0 - */ -abstract class TClientSideOptions extends TComponent -{ - /** - * @var TMap list of client-side options. - */ - private $_options; - - /** - * Constructor, initialize the options list. - */ - public function __construct() - { - $this->_options = Prado::createComponent('System.Collections.TMap'); - } - - /** - * Adds on client-side event handler by wrapping the code within a - * javascript function block. If the code begins with "javascript:", the - * code is assumed to be a javascript function block rather than arbiturary - * javascript statements. - * @param string option name - * @param string javascript statements. - */ - protected function setFunction($name, $code) - { - $this->_options->add($name, $this->ensureFunction($code)); - } - - /** - * @return string gets a particular option, null if not set. - */ - protected function getOption($name) - { - return $this->_options->itemAt($name); - } - - /** - * @return TMap gets the list of options as TMap - */ - public function getOptions() - { - return $this->_options; - } - - /** - * Ensure that the javascript statements are wrapped in a javascript - * function block. Default has no wrapping. Override this method to - * customize the wrapping javascript function block. - */ - protected function ensureFunction($javascript) - { - return $javascript; - } -} - ?>
\ No newline at end of file |