From 5d7149045a6fb6c40c0dbfb863e8b4fef3d9952f Mon Sep 17 00:00:00 2001
From: xue <>
Date: Sun, 27 Nov 2005 18:50:44 +0000
Subject:
---
framework/Web/UI/TClientScriptManager.php | 151 +++++++++++++++++++++++-------
framework/Web/UI/TPage.php | 4 +-
framework/Web/UI/TPostBackOptions.php | 4 +-
3 files changed, 118 insertions(+), 41 deletions(-)
(limited to 'framework/Web/UI')
diff --git a/framework/Web/UI/TClientScriptManager.php b/framework/Web/UI/TClientScriptManager.php
index 0f760251..7bbbbdfa 100644
--- a/framework/Web/UI/TClientScriptManager.php
+++ b/framework/Web/UI/TClientScriptManager.php
@@ -1,7 +1,39 @@
ActionUrl=$actionUrl;
+ $this->Argument=$argument;
+ $this->AutoPostBack=$autoPostBack;
+ $this->ClientSubmit=$clientSubmit;
+ $this->PerformValidation=$performValidation;
+ $this->TargetControl=$targetControl;
+ $this->TrackFocus=$trackFocus;
+ $this->ValidationGroup=$validationGroup;
+ }
+}
+
class TClientScriptManager extends TComponent
{
+ const POSTBACK_FUNC='__doPostBack';
private $_owner;
private $_hiddenFields=array();
private $_scriptBlocks=array();
@@ -9,24 +41,22 @@ class TClientScriptManager extends TComponent
private $_scriptIncludes=array();
private $_onSubmitStatements=array();
private $_arrayDeclares=array();
+ private $_expandoAttributes=array();
public function __construct(TPage $owner)
{
$this->_owner=$owner;
}
- final public function getPostBackEventReference($options)
+ public function getPostBackEventReference($options,$javascriptPrefix=true)
{
- if($options->RequiresJavaScriptProtocol)
- $str='javascript:';
- else
- $str='';
+ $str=$javascriptPrefix?'javascript:':'';
if($options->AutoPostBack)
$str.="setTimeout('";
if(!$options->PerformValidation && !$options->TrackFocus && $options->ClientSubmit && $options->ActionUrl==='')
{
- $this->_owner->registerPostBackScript();
- $postback="__doPostBack('".$options->TargetControl->getUniqueID()."','".THttpUtility::quoteJavaScriptString($options->Argument)."')";
+ $this->registerPostBackScript();
+ $postback=self::POSTBACK_FUNC.'(\''.$options->TargetControl->getUniqueID().'\',\''.THttpUtility::quoteJavaScriptString($options->Argument).'\')';
if($options->AutoPostBack)
{
$str.=THttpUtility::quoteJavaScriptString($postback);
@@ -92,64 +122,67 @@ class TClientScriptManager extends TComponent
return '';
}
- final public function isHiddenFieldRegistered($key)
+ public function isHiddenFieldRegistered($key)
{
return isset($this->_hiddenFields[$key]);
}
- final public function isClientScriptBlockRegistered($key)
+ public function isScriptBlockRegistered($key)
{
return isset($this->_scriptBlocks[$key]);
}
- final public function isClientScriptIncludeRegistered($key)
+ public function isScriptIncludeRegistered($key)
{
return isset($this->_scriptIncludes[$key]);
}
- final public function isStartupScriptRegistered($key)
+ public function isStartupScriptRegistered($key)
{
return isset($this->_startupScripts[$key]);
}
- final public function isOnSubmitStatementRegistered($key)
+ public function isOnSubmitStatementRegistered($key)
{
return isset($this->_onSubmitStatements[$key]);
}
- final public function registerArrayDeclaration($name,$value)
+ public function registerArrayDeclaration($name,$value)
{
$this->_arrayDeclares[$name][]=$value;
}
- final public function registerClientScriptBlock($key,$script)
+ public function registerScriptBlock($key,$script)
{
- $this->_criptBlocks[$key]=$script;
+ $this->_scriptBlocks[$key]=$script;
}
- final public function registerClientScriptInclude($key,$url)
+ public function registerScriptInclude($key,$url)
{
$this->_scriptIncludes[$key]=$url;
}
- // todo: register an asset
-
- final public function registerHiddenField($name,$value)
+ public function registerHiddenField($name,$value)
{
$this->_hiddenFields[$name]=$value;
}
- final public function registerOnSubmitStatement($key,$script)
+ public function registerOnSubmitStatement($key,$script)
{
$this->_onSubmitStatements[$key]=$script;
}
- final public function registerStartupScript($key,$script)
+ public function registerStartupScript($key,$script)
{
$this->_startupScripts[$key]=$script;
}
- final public function renderArrayDeclarations($writer)
+ public function registerExpandoAttribute($controlID,$name,$value)
+ {
+ $this->_expandoAttributes[$controlID][$name]=$value;
+ }
+
+ public function renderArrayDeclarations($writer)
{
if(count($this->_arrayDeclares))
{
@@ -175,14 +208,14 @@ class TClientScriptManager extends TComponent
}
}
- final public function renderClientScriptBlocks($writer)
+ public function renderScriptBlocks($writer)
{
$str='';
foreach($this->_scriptBlocks as $script)
- $str.=$script;
+ $str.="\n".$script;
if($this->_owner->getClientOnSubmitEvent()!=='' && $this->_owner->getClientSupportsJavaScript())
{
- $str.="function WebForm_OnSubmit() {\n";
+ $str.="\nfunction WebForm_OnSubmit() {\n";
foreach($this->_onSubmitStatements as $script)
$str.=$script;
$str.="\nreturn true;\n}";
@@ -191,19 +224,19 @@ class TClientScriptManager extends TComponent
$writer->write("\n\n");
}
- final public function renderClientStartupScripts($writer)
+ public function renderStartupScripts($writer)
{
if(count($this->_startupScripts))
{
$str="\n\n";
$writer->write($str);
}
}
- final public function renderHiddenFields($writer)
+ public function renderHiddenFields($writer)
{
$str='';
foreach($this->_hiddenFields as $name=>$value)
@@ -216,21 +249,67 @@ class TClientScriptManager extends TComponent
$this->_hiddenFields=array();
}
- /**
- * @internal
- */
- final public function getHasHiddenFields()
+ public function renderExpandoAttribute($writer)
+ {
+ if(count($this->_expandoAttributes))
+ {
+ $str="\n\n";
+ $writer->write($str);
+ }
+ }
+
+ public function getHasHiddenFields()
{
return count($this->_hiddenFields)>0;
}
- /**
- * @internal
- */
- final public function getHasSubmitStatements()
+ public function getHasSubmitStatements()
{
return count($this->_onSubmitStatements)>0;
}
+
+
+ /*
+ internal void RenderWebFormsScript(HtmlTextWriter writer)
+ private void EnsureEventValidationFieldLoaded();
+ internal string GetEventValidationFieldValue();
+ public string GetWebResourceUrl(Type type, string resourceName);
+ public void RegisterClientScriptResource(Type type, string resourceName);
+ internal void RegisterDefaultButtonScript(Control button, $writer, bool useAddAttribute);
+ public function SaveEventValidationField();
+ public void ValidateEvent(string uniqueId, string argument);
+ public function getCallbackEventReference()
+ */
+
+ public function registerPostBackScript()
+ {
+ $this->registerHiddenField('__EVENTTARGET','');
+ $this->registerHiddenField('__EVENTPARAM','');
+ $id=$this->_owner->getForm()->getUniqueID();
+ $script=<<registerStartupScript('form',$script);
+ }
}
?>
\ No newline at end of file
diff --git a/framework/Web/UI/TPage.php b/framework/Web/UI/TPage.php
index 50b29c35..902a0212 100644
--- a/framework/Web/UI/TPage.php
+++ b/framework/Web/UI/TPage.php
@@ -251,7 +251,7 @@ EOD;
if($this->_requireWebFormsScript)
$this->renderWebFormsScript($writer);
}
- $this->getClientScript()->renderClientScriptBlocks($writer);
+ $this->getClientScript()->renderScriptBlocks($writer);
// todo: more ....
}
@@ -276,7 +276,7 @@ EOD;
if($this->_requireWebFormsScript && !$this->_webFormsScriptRendered)
$this->renderWebFormsScript($writer);
}
- $cs->renderClientStartupScripts($writer);
+ $cs->renderStartupScripts($writer);
$this->_inFormRender=false;
}
diff --git a/framework/Web/UI/TPostBackOptions.php b/framework/Web/UI/TPostBackOptions.php
index ee615d0b..b39d5675 100644
--- a/framework/Web/UI/TPostBackOptions.php
+++ b/framework/Web/UI/TPostBackOptions.php
@@ -7,7 +7,6 @@ class TPostBackOptions extends TComponent
public $AutoPostBack;
public $ClientSubmit;
public $PerformValidation;
- public $RequiresJavaScriptProtocol;
public $TargetControl;
public $TrackFocus;
public $ValidationGroup;
@@ -16,17 +15,16 @@ class TPostBackOptions extends TComponent
$argument='',
$actionUrl='',
$autoPostBack=false,
- $requiresJavaScriptProtocol=false,
$trackFocus=false,
$clientSubmit=true,
$performValidation=false,
$validationGroup='')
{
$this->ActionUrl=$actionUrl;
+ $this->Argument=$argument;
$this->AutoPostBack=$autoPostBack;
$this->ClientSubmit=$clientSubmit;
$this->PerformValidation=$performValidation;
- $this->RequiresJavaScriptProtocol=$requiresJavaScriptProtocol;
$this->TargetControl=$targetControl;
$this->TrackFocus=$trackFocus;
$this->ValidationGroup=$validationGroup;
--
cgit v1.2.3