summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorctrlaltca <>2012-05-18 18:00:24 +0000
committerctrlaltca <>2012-05-18 18:00:24 +0000
commit098556f20a2014f8ca211b0820cfa4776052641b (patch)
treec111b60f6a28f9dd966bb26dfa41739bcb564a49
parent4560efdc051a3b3f76e74375fadf40f118b6dbb3 (diff)
fix #401
-rw-r--r--framework/Web/Javascripts/source/prado/scriptaculous-adapter.js22
-rw-r--r--framework/Web/UI/ActiveControls/TCallbackClientScript.php20
-rw-r--r--framework/Web/UI/WebControls/TClientScript.php13
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
@@ -414,6 +414,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:
* <pre>
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
@@ -434,6 +434,26 @@ class TCallbackClientScript extends TApplicationComponent
}
/**
+ * 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
* component developers. The render() method is defered to be called in the
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("<script type=\"text/javascript\">\n/*<![CDATA[*/\n");
- $this->renderChildren($writer);
- $writer->write("\n/*]]>*/\n</script>\n");
+ if($this->getPage()->getIsCallback())
+ {
+ $extWriter= $this->getPage()->getResponse()->createHtmlWriter();
+ $this->renderChildren($extWriter);
+ $this->getPage()->getCallbackClient()->appendScriptBlock($extWriter);
+ } else {
+ $writer->write("<script type=\"text/javascript\">\n/*<![CDATA[*/\n");
+ $this->renderChildren($writer);
+ $writer->write("\n/*]]>*/\n</script>\n");
+ }
}
}
}