diff options
Diffstat (limited to 'framework/Web/UI/TClientScriptManager.php')
-rw-r--r-- | framework/Web/UI/TClientScriptManager.php | 174 |
1 files changed, 88 insertions, 86 deletions
diff --git a/framework/Web/UI/TClientScriptManager.php b/framework/Web/UI/TClientScriptManager.php index 7bbbbdfa..d4aea650 100644 --- a/framework/Web/UI/TClientScriptManager.php +++ b/framework/Web/UI/TClientScriptManager.php @@ -33,7 +33,13 @@ class TPostBackOptions extends TComponent class TClientScriptManager extends TComponent
{
- const POSTBACK_FUNC='__doPostBack';
+ const SCRIPT_DIR='Web/Javascripts/js';
+ const POSTBACK_FUNC='Prado.PostBack.perform';
+ const POSTBACK_OPTIONS='Prado.PostBack.Options';
+ const FIELD_POSTBACK_TARGET='PRADO_POSTBACK_TARGET';
+ const FIELD_POSTBACK_PARAMETER='PRADO_POSTBACK_PARAMETER';
+ const FIELD_LASTFOCUS='PRADO_LASTFOCUS';
+ const FIELD_PAGE_STATE='PRADO_PAGE_STATE';
private $_owner;
private $_hiddenFields=array();
private $_scriptBlocks=array();
@@ -48,78 +54,89 @@ class TClientScriptManager extends TComponent $this->_owner=$owner;
}
- public function getPostBackEventReference($options,$javascriptPrefix=true)
+ public function getPostBackEventReference($control,$parameter='',$options=null,$javascriptPrefix=true)
{
- $str=$javascriptPrefix?'javascript:':'';
- if($options->AutoPostBack)
- $str.="setTimeout('";
- if(!$options->PerformValidation && !$options->TrackFocus && $options->ClientSubmit && $options->ActionUrl==='')
+ if($options)
{
- $this->registerPostBackScript();
- $postback=self::POSTBACK_FUNC.'(\''.$options->TargetControl->getUniqueID().'\',\''.THttpUtility::quoteJavaScriptString($options->Argument).'\')';
- if($options->AutoPostBack)
+ $flag=false;
+ $opt='new '.self::POSTBACK_OPTIONS.'(';
+ if($options->PerformValidation)
{
- $str.=THttpUtility::quoteJavaScriptString($postback);
- $str.="',0)";
+ $flag=true;
+ $this->registerValidationScript();
+ $opt.='true,';
}
else
- $str.=$postback;
- return $str;
- }
- $str.='WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("';
- $str.=$options->TargetControl->getUniqueID().'", ';
- if(($arg=$options->Argument)==='')
- $str.='"", ';
- else
- $str.='"'.THttpUtility::quoteJavaScriptString($arg).'", ';
- $flag=false;
- if($options->PerformValidation)
- {
- $flag=true;
- $str.='true, ';
- }
- else
- $str.='false, ';
- if($options->ValidationGroup!=='')
- {
- $flag=true;
- $str.='"'.$options->ValidationGroup.'", ';
- }
- else
- $str.='"", ';
- if($options->ActionUrl!=='')
- {
- $flag=true;
- $this->_owner->setContainsCrossPagePost(true);
- $str.='"'.THttpUtility::quoteJavaScriptString($options->ActionUrl).'", ';
- }
- else
- $str.='"", ';
- if($options->TrackFocus)
- {
- $this->_owner->registerFocusScript();
- $flag=true;
- $str.='true, ';
- }
- else
- $str.='false, ';
- if($options->ClientSubmit)
- {
- $flag=true;
- $this->_owner->registerPostBackScript();
- $str.='true))';
- }
- else
- $str.='false))';
- if($options->AutoPostBack)
- $str.="', 0)";
- if($flag)
- {
- $this->_owner->registerWebFormsScript();
- return $str;
+ $opt.='false,';
+ if($options->ValidationGroup!=='')
+ {
+ $flag=true;
+ $opt.='"'.$options->ValidationGroup.'",';
+ }
+ else
+ $opt.='"",';
+ if($options->ActionUrl!=='')
+ {
+ $flag=true;
+ $this->_owner->setCrossPagePostBack(true);
+ $opt.='"'.THttpUtility::quoteJavaScriptString($options->ActionUrl).'",';
+ }
+ else
+ $opt.='"",';
+ if($options->TrackFocus)
+ {
+ $flag=true;
+ $this->registerFocusScript();
+ $opt.='true,';
+ }
+ else
+ $opt.='false,';
+ if($options->ClientSubmit)
+ {
+ $flag=true;
+ $opt.='true)';
+ }
+ else
+ $opt.='false)';
+ //if(!$flag)
+ // return '';
}
else
- return '';
+ $opt='null';
+ $this->registerPostBackScript();
+ $formID=$this->_owner->getForm()->getUniqueID();
+ $postback=self::POSTBACK_FUNC.'(\''.$formID.'\',\''.$control->getUniqueID().'\',\''.THttpUtility::quoteJavaScriptString($parameter).'\','.$opt.')';
+ if($options && $options->AutoPostBack)
+ $postback='setTimeout(\''.THttpUtility::quoteJavaScriptString($postback).'\',0)';
+ return $javascriptPrefix?'javascript:'.$postback:$postback;
+ }
+
+ protected function registerPostBackScript()
+ {
+ $this->registerHiddenField(self::FIELD_POSTBACK_TARGET,'');
+ $this->registerHiddenField(self::FIELD_POSTBACK_PARAMETER,'');
+ $am=$this->_owner->getService()->getAssetManager();
+ $url=$am->publishFilePath(Prado::getFrameworkPath().'/'.self::SCRIPT_DIR.'/base.js');
+ $this->registerScriptInclude('prado:base',$url);
+ }
+
+ public function registerFocusScript()
+ {
+ // need Focus.js
+ }
+
+ public function registerScrollScript()
+ {
+ $this->registerHiddenField(self::FIELD_SCROLL_X,$this->_owner->getScrollPositionX());
+ $this->registerHiddenField(self::FIELD_SCROLL_Y,$this->_owner->getScrollPositionY());
+ /*
+ this.ClientScript.RegisterStartupScript(typeof(Page), "PageScrollPositionScript", "\r\ntheForm.oldSubmit = theForm.submit;\r\ntheForm.submit = WebForm_SaveScrollPositionSubmit;\r\n\r\ntheForm.oldOnSubmit = theForm.onsubmit;\r\ntheForm.onsubmit = WebForm_SaveScrollPositionOnSubmit;\r\n" + (this.IsPostBack ? "\r\ntheForm.oldOnLoad = window.onload;\r\nwindow.onload = WebForm_RestoreScrollPosition;\r\n" : string.Empty), true);
+ need base.js
+ */
+ }
+
+ public function registerValidationScript()
+ {
}
public function isHiddenFieldRegistered($key)
@@ -226,11 +243,14 @@ class TClientScriptManager extends TComponent public function renderStartupScripts($writer)
{
+ $str='';
+ foreach($this->_scriptIncludes as $include)
+ $str.="\n<script type=\"text/javascript\" src=\"".THttpUtility::htmlEncode($include)."\"></script>";
if(count($this->_startupScripts))
{
- $str="\n<script type=\"text/javascript\">\n<!--\n";
+ $str.="\n<script type=\"text/javascript\">\n<!--\n";
foreach($this->_startupScripts as $script)
- $str.="\n".$script;
+ $str.=$script;
$str.="// -->\n</script>\n";
$writer->write($str);
}
@@ -292,24 +312,6 @@ class TClientScriptManager extends TComponent 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=<<<EOD
-function __doPostBack(eventTarget, eventParameter) {
- var validation = typeof(Prado) != 'undefined' && typeof(Prado.Validation) != 'undefined';
- var theform = document.getElementById ? document.getElementById('$id') : document.forms['$id'];
- theform.__EVENTTARGET.value = eventTarget.split('\$').join(':');
- theform.__EVENTPARAMETER.value = eventParameter;
- if(!validation || Prado.Validation.OnSubmit(theform))
- theform.submit();
-}
-EOD;
- $this->registerStartupScript('form',$script);
- }
}
?>
\ No newline at end of file |