summaryrefslogtreecommitdiff
path: root/framework/Web
diff options
context:
space:
mode:
authorFabio Bas <ctrlaltca@gmail.com>2013-11-03 19:33:34 +0100
committerFabio Bas <ctrlaltca@gmail.com>2013-11-26 11:42:49 +0100
commit8f389748d555b39d139bc0852e35f2541f4e2cb5 (patch)
tree461e6acbf7170540777c1522c3cdfd8b3168ae33 /framework/Web
parent36f481b48d9777963d063e227a10882d318dc8d8 (diff)
Fixed evaluation of end-scripts on callback
Aka: fix js event creation on callbacks
Diffstat (limited to 'framework/Web')
-rw-r--r--framework/Web/Javascripts/TJavaScript.php13
-rw-r--r--framework/Web/Javascripts/source/prado/prado.js10
-rw-r--r--framework/Web/UI/ActiveControls/TActivePageAdapter.php2
-rw-r--r--framework/Web/UI/ActiveControls/TCallbackClientScript.php11
-rw-r--r--framework/Web/UI/TClientScriptManager.php16
5 files changed, 49 insertions, 3 deletions
diff --git a/framework/Web/Javascripts/TJavaScript.php b/framework/Web/Javascripts/TJavaScript.php
index 0f6fef1c..8cfbc9ba 100644
--- a/framework/Web/Javascripts/TJavaScript.php
+++ b/framework/Web/Javascripts/TJavaScript.php
@@ -60,6 +60,19 @@ class TJavaScript
}
/**
+ * Renders a list of javascript code
+ * @param array javascript blocks
+ * @return string rendering result
+ */
+ public static function renderScriptBlocksCallback($scripts)
+ {
+ if(count($scripts))
+ return implode("\n",$scripts)."\n";
+ else
+ return '';
+ }
+
+ /**
* Renders javascript block
* @param string javascript block
* @return string rendering result
diff --git a/framework/Web/Javascripts/source/prado/prado.js b/framework/Web/Javascripts/source/prado/prado.js
index 7c3308c8..13e8be92 100644
--- a/framework/Web/Javascripts/source/prado/prado.js
+++ b/framework/Web/Javascripts/source/prado/prado.js
@@ -524,9 +524,17 @@ Prado.Element =
* Evaluate a javascript snippet from a string.
* @function ?
* @param {string} content - String containing the script
+ * @param {string} boundary - Boundary containing the script
*/
- evaluateScript : function(content)
+ evaluateScript : function(content, boundary)
{
+ if(boundary)
+ {
+ var result = this.extractContent(boundary);
+ if(result != null)
+ content = result;
+ }
+
try
{
jQuery.globalEval(content);
diff --git a/framework/Web/UI/ActiveControls/TActivePageAdapter.php b/framework/Web/UI/ActiveControls/TActivePageAdapter.php
index 03fe2f16..c594ed42 100644
--- a/framework/Web/UI/ActiveControls/TActivePageAdapter.php
+++ b/framework/Web/UI/ActiveControls/TActivePageAdapter.php
@@ -198,7 +198,7 @@ class TActivePageAdapter extends TControlAdapter
if($this->getPage()->getClientScript()->hasEndScripts())
{
$writer = $response->createHtmlWriter();
- $this->getPage()->getClientScript()->renderEndScripts($writer);
+ $this->getPage()->getClientScript()->renderEndScriptsCallback($writer);
$this->getPage()->getCallbackClient()->evaluateScript($writer);
}
diff --git a/framework/Web/UI/ActiveControls/TCallbackClientScript.php b/framework/Web/UI/ActiveControls/TCallbackClientScript.php
index a25e7f41..96c8d38e 100644
--- a/framework/Web/UI/ActiveControls/TCallbackClientScript.php
+++ b/framework/Web/UI/ActiveControls/TCallbackClientScript.php
@@ -452,7 +452,16 @@ class TCallbackClientScript extends TApplicationComponent
*/
public function evaluateScript($writer)
{
- $this->callClientFunction('Prado.Element.evaluateScript', array($writer));
+ if($writer instanceof THtmlWriter)
+ {
+ $boundary = $this->getResponseContentBoundary($writer);
+ $content = null;
+ } else {
+ $boundary = null;
+ $content = $writer;
+ }
+
+ $this->callClientFunction('Prado.Element.evaluateScript', array($content, $boundary));
}
/**
diff --git a/framework/Web/UI/TClientScriptManager.php b/framework/Web/UI/TClientScriptManager.php
index 5f9ea8b4..80a71ea0 100644
--- a/framework/Web/UI/TClientScriptManager.php
+++ b/framework/Web/UI/TClientScriptManager.php
@@ -697,6 +697,22 @@ class TClientScriptManager extends TApplicationComponent
$writer->write(TJavaScript::renderScriptBlocks($this->_endScripts));
}
+ /**
+ * @param THtmlWriter writer for the rendering purpose
+ */
+ public function renderBeginScriptsCallback($writer)
+ {
+ $writer->write(TJavaScript::renderScriptBlocksCallback($this->_beginScripts));
+ }
+
+ /**
+ * @param THtmlWriter writer for the rendering purpose
+ */
+ public function renderEndScriptsCallback($writer)
+ {
+ $writer->write(TJavaScript::renderScriptBlocksCallback($this->_endScripts));
+ }
+
public function renderHiddenFieldsBegin($writer)
{
$this->renderHiddenFieldsInt($writer,true);