From 098556f20a2014f8ca211b0820cfa4776052641b Mon Sep 17 00:00:00 2001
From: ctrlaltca <>
Date: Fri, 18 May 2012 18:00:24 +0000
Subject: fix #401
---
.../source/prado/scriptaculous-adapter.js | 22 ++++++++++++++++++++++
.../UI/ActiveControls/TCallbackClientScript.php | 20 ++++++++++++++++++++
framework/Web/UI/WebControls/TClientScript.php | 13 ++++++++++---
3 files changed, 52 insertions(+), 3 deletions(-)
diff --git a/framework/Web/Javascripts/source/prado/scriptaculous-adapter.js b/framework/Web/Javascripts/source/prado/scriptaculous-adapter.js
index 23b49f56..740f9607 100644
--- a/framework/Web/Javascripts/source/prado/scriptaculous-adapter.js
+++ b/framework/Web/Javascripts/source/prado/scriptaculous-adapter.js
@@ -413,6 +413,28 @@ Prado.Element =
}
},
+ /**
+ * Appends a javascript block to the document.
+ * @function ?
+ * @param {string} boundary - Boundary containing the javascript code
+ */
+ appendScriptBlock : function(boundary)
+ {
+ var content = Prado.Element.extractContent(this.transport.responseText, boundary);
+ if(content == null)
+ return;
+ var id = 'inline_' + boundary;
+
+ if($(id))
+ document.body.removeChild($(id));
+
+ var el = document.createElement("script");
+ el.type = "text/javascript";
+ el.id = id;
+ el.text = content;
+ document.body.appendChild(el);
+ },
+
/**
* Extract content from a text by its boundary id.
* Boundaries have this form:
diff --git a/framework/Web/UI/ActiveControls/TCallbackClientScript.php b/framework/Web/UI/ActiveControls/TCallbackClientScript.php
index 453824db..ecc213f5 100644
--- a/framework/Web/UI/ActiveControls/TCallbackClientScript.php
+++ b/framework/Web/UI/ActiveControls/TCallbackClientScript.php
@@ -433,6 +433,26 @@ class TCallbackClientScript extends TApplicationComponent
$this->replace(null, $writer, 'Prado.Element.evaluateScript');
}
+ /**
+ * Appends a block of inline javascript enclosed in a boundary.
+ * Similar to to evaluateScript(), but functions declared in the
+ * inline block will be available to page elements.
+ * @param THtmlWriter writer for the content.
+ */
+ public function appendScriptBlock($content)
+ {
+ if($content instanceof TControl)
+ {
+ $boundary = $this->getRenderedContentBoundary($content);
+ }
+ else if($content instanceof THtmlWriter)
+ {
+ $boundary = $this->getResponseContentBoundary($content);
+ }
+
+ $this->callClientFunction('Prado.Element.appendScriptBlock', array($boundary));
+ }
+
/**
* Renders the control and return the content boundary from
* TCallbackResponseWriter. This method should only be used by framework
diff --git a/framework/Web/UI/WebControls/TClientScript.php b/framework/Web/UI/WebControls/TClientScript.php
index 325105bc..4736df0e 100644
--- a/framework/Web/UI/WebControls/TClientScript.php
+++ b/framework/Web/UI/WebControls/TClientScript.php
@@ -132,9 +132,16 @@ class TClientScript extends TControl
{
if($this->getHasControls())
{
- $writer->write("\n");
+ if($this->getPage()->getIsCallback())
+ {
+ $extWriter= $this->getPage()->getResponse()->createHtmlWriter();
+ $this->renderChildren($extWriter);
+ $this->getPage()->getCallbackClient()->appendScriptBlock($extWriter);
+ } else {
+ $writer->write("\n");
+ }
}
}
}
--
cgit v1.2.3