summaryrefslogtreecommitdiff
path: root/framework/Web/UI/TClientScriptManager.php
diff options
context:
space:
mode:
Diffstat (limited to 'framework/Web/UI/TClientScriptManager.php')
-rw-r--r--framework/Web/UI/TClientScriptManager.php183
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