You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by jk...@apache.org on 2006/07/03 00:08:25 UTC
svn commit: r418657 - in /tapestry/tapestry4/trunk/framework/src:
java/org/apache/tapestry/services/impl/DojoAjaxResponseBuilder.java
js/tapestry/core.js
test/org/apache/tapestry/services/impl/DojoAjaxResponseBuilderTest.java
Author: jkuhnert
Date: Sun Jul 2 15:08:25 2006
New Revision: 418657
URL: http://svn.apache.org/viewvc?rev=418657&view=rev
Log:
Added in proper handling of various types of script responses during ajax renders(body/initialization/URL includes)
Modified:
tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/services/impl/DojoAjaxResponseBuilder.java
tapestry/tapestry4/trunk/framework/src/js/tapestry/core.js
tapestry/tapestry4/trunk/framework/src/test/org/apache/tapestry/services/impl/DojoAjaxResponseBuilderTest.java
Modified: tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/services/impl/DojoAjaxResponseBuilder.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/services/impl/DojoAjaxResponseBuilder.java?rev=418657&r1=418656&r2=418657&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/services/impl/DojoAjaxResponseBuilder.java (original)
+++ tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/services/impl/DojoAjaxResponseBuilder.java Sun Jul 2 15:08:25 2006
@@ -237,10 +237,10 @@
{
IMarkupWriter writer = getWriter(ResponseBuilder.INCLUDE_SCRIPT, ResponseBuilder.SCRIPT_TYPE);
- writer.begin("script");
- writer.attribute("type", "text/javascript");
- writer.attribute("src", url);
- writer.end();
+ writer.printRaw("tapestry.loadScriptFromUrl(\"");
+ writer.print(url);
+ writer.printRaw("\");");
+
writer.println();
}
Modified: tapestry/tapestry4/trunk/framework/src/js/tapestry/core.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/framework/src/js/tapestry/core.js?rev=418657&r1=418656&r2=418657&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/framework/src/js/tapestry/core.js (original)
+++ tapestry/tapestry4/trunk/framework/src/js/tapestry/core.js Sun Jul 2 15:08:25 2006
@@ -60,7 +60,8 @@
}
var elms=resp[0].childNodes;
- var scripts=[];
+ var bodyScripts=[];
+ var initScripts=[];
for (var i=0; i<elms.length; i++) {
var type=elms[i].getAttribute("type");
var id=elms[i].getAttribute("id");
@@ -71,13 +72,24 @@
return;
}
+ // handle javascript evaluations
if (type == "script") {
- scripts.push(elms[i]);
- continue;
+
+ if (id == "initializationscript") {
+ initScripts.push(elms[i]);
+ continue;
+ } else if (id == "bodyScripts") {
+ bodyScripts.push(elms[i]);
+ continue;
+ } else if (id == "includescript") {
+ // includes get processed immediately (syncrhonously)
+ tapestry.loadScriptContent(elms[i], false);
+ }
+
}
if (!id) {
- dojo.raise("No element id found in ajax-response node.");
+ dojo.raise("No element id found in ajax-response node.");
return;
}
@@ -90,8 +102,12 @@
tapestry.loadContent(id, node, elms[i]);
}
- for (var i=0; i<scripts.length; i++) {
- tapestry.loadScriptContent(scripts[i], true);
+ // load body scripts before initialization
+ for (var i=0; i<bodyScripts.length; i++) {
+ tapestry.loadScriptContent(bodyScripts[i], true);
+ }
+ for (var i=0; i<initScripts.length; i++) {
+ tapestry.loadScriptContent(initScripts[i], true);
}
},
@@ -130,38 +146,44 @@
match = new RegExp(tapestry.ScriptFragment, 'im');
if (async) {
- setTimeout(function() {
- tapestry.scriptInFlight = true;
-
- for (var i=0; i<scripts.length; i++) {
- var scr = scripts[i].match(match)[1];
- try {
- dojo.log.debug("evaluating script:" + scr);
- eval(scr);
- } catch (e) {
- tapestry.scriptInFlight = false;
- dojo.log.exception("Error evaluating script: " + scr, e, false);
- }
- }
-
- tapestry.scriptInFlight = false;
- }, 60);
+ setTimeout(function() {
+ tapestry.evaluateScripts(scripts, match);
+ }, 60);
} else {
- tapestry.scriptInFlight = true;
-
- for (var i=0; i<scripts.length; i++) {
- var scr = scripts[i].match(match)[1];
- try {
- dojo.log.debug("synchronous eval of script:" + scr);
- eval(scr);
- } catch (e) {
- tapestry.scriptInFlight = false;
- dojo.log.exception("Error synchronously evaluating script: " + scr, e, false);
- }
+ tapestry.evaluateScripts(scripts, match);
+ }
+ },
+
+ evaluateScripts:function(scripts, match){
+ tapestry.scriptInFlight = true;
+
+ for (var i=0; i<scripts.length; i++) {
+ var scr = scripts[i].match(match)[1];
+ try {
+ dojo.log.debug("evaluating script:" + scr);
+ eval(scr);
+ } catch (e) {
+ tapestry.scriptInFlight = false;
+ dojo.log.exception("Error evaluating script: " + scr, e, false);
}
-
- tapestry.scriptInFlight = false;
}
+
+ tapestry.scriptInFlight = false;
+ },
+
+ loadScriptFromUrl:function(url){
+ var scripts = window.document.getElementsByTagName("script");
+ for (var i = 0; i < scripts.length; i++) {
+ var src = scripts[i].src;
+ if (src && src.length > 0 && src.indexOf(url)>=0 ) {
+ return;
+ }
+ }
+
+ var e = document.createElement("script");
+ e.src = url;
+ e.type = "text/javascript";
+ document.getElementsByTagName("head")[0].appendChild(e);
},
presentException:function(node, kwArgs) {
Modified: tapestry/tapestry4/trunk/framework/src/test/org/apache/tapestry/services/impl/DojoAjaxResponseBuilderTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/framework/src/test/org/apache/tapestry/services/impl/DojoAjaxResponseBuilderTest.java?rev=418657&r1=418656&r2=418657&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/framework/src/test/org/apache/tapestry/services/impl/DojoAjaxResponseBuilderTest.java (original)
+++ tapestry/tapestry4/trunk/framework/src/test/org/apache/tapestry/services/impl/DojoAjaxResponseBuilderTest.java Sun Jul 2 15:08:25 2006
@@ -245,7 +245,7 @@
DojoAjaxResponseBuilder builder = new DojoAjaxResponseBuilder(mw, null);
String script1 = "http://noname/js/package.js";
- String script2 = "http://noname/js/package.js";
+ String script2 = "http://noname/js/package2.js";
verify();
replay();
@@ -261,9 +261,9 @@
assertOutput("<?xml version=\"1.0\" encoding=\"UTF-8\"?><!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\" [\n" +
"<!ENTITY nbsp \' \'>\n" +
"]>\n" +
- "<ajax-response><response id=\"includescript\" type=\"script\"><script type=\"text/javascript\" src=\"http://noname/js/package.js\"></script>" +
+ "<ajax-response><response id=\"includescript\" type=\"script\">tapestry.loadScriptFromUrl(\"http://noname/js/package.js\");" +
LINE_SEPERATOR +
- "<script type=\"text/javascript\" src=\"http://noname/js/package.js\"></script>" +
+ "tapestry.loadScriptFromUrl(\"http://noname/js/package2.js\");" +
LINE_SEPERATOR +
"</response></ajax-response>");