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(-) (limited to 'framework/Web') 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