You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by jk...@apache.org on 2006/11/16 00:24:21 UTC

svn commit: r475491 - in /tapestry/tapestry4/trunk: tapestry-examples/TimeTracker/src/context/WEB-INF/ tapestry-examples/TimeTracker/src/context/js/ tapestry-framework/src/java/org/apache/tapestry/dojo/ tapestry-framework/src/java/org/apache/tapestry/d...

Author: jkuhnert
Date: Wed Nov 15 15:24:20 2006
New Revision: 475491

URL: http://svn.apache.org/viewvc?view=rev&rev=475491
Log:
Fixes for TAPESTRY-1150. Was using asset service to generate urls when I could've just called IAsset.buildURL(). This now
properly allows for using context based dojo/etc includes. 

Also fixed tapestry.namespace to properly detect a module registration path for tapestry js modules and act appropriately.

Added:
    tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/src/context/js/
Modified:
    tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/src/context/WEB-INF/Border.html
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/AjaxShellDelegate.java
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/html/ScriptIncludes.jwc
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/html/Shell.jwc
    tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/dojo.js
    tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/namespace.js
    tapestry/tapestry4/trunk/tapestry-framework/src/scripts/TestLibrary.xml
    tapestry/tapestry4/trunk/tapestry-framework/src/scripts/TestSimple.xml
    tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/dojo/AjaxShellDelegateTest.java

Modified: tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/src/context/WEB-INF/Border.html
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/src/context/WEB-INF/Border.html?view=diff&rev=475491&r1=475490&r2=475491
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/src/context/WEB-INF/Border.html (original)
+++ tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/src/context/WEB-INF/Border.html Wed Nov 15 15:24:20 2006
@@ -1,7 +1,8 @@
 <html jwcid="@Shell" 
 	  title="message:window.title"
 	  browserLogLevel="DEBUG"
-	  consoleEnabled="true" >
+	  consoleEnabled="true"
+	  >
 <link jwcid="@Relation" href="favicon.ico" type="image/gif" rel="shortcut icon" />    
 <link jwcid="@Relation" href="css/timetracker.css" media="all" />
 

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/AjaxShellDelegate.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/AjaxShellDelegate.java?view=diff&rev=475491&r1=475490&r2=475491
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/AjaxShellDelegate.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/AjaxShellDelegate.java Wed Nov 15 15:24:20 2006
@@ -20,7 +20,6 @@
 import org.apache.tapestry.IMarkupWriter;
 import org.apache.tapestry.IRender;
 import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.engine.IEngineService;
 import org.apache.tapestry.html.Shell;
 import org.apache.tapestry.json.JSONObject;
 
@@ -50,7 +49,7 @@
     
     private IAsset _tapestrySource;
     
-    private IEngineService _assetService;
+    private IAsset _tapestryPath;
     
     private boolean _parseWidgets;
     
@@ -89,9 +88,7 @@
         
         // The key to resolving everything out of the asset service
         
-        dojoConfig.put("baseRelativePath", 
-                _assetService.getLink(true, _dojoPath.getResourceLocation().getPath()).getURL());
-        
+        dojoConfig.put("baseRelativePath", _dojoPath.buildURL());
         dojoConfig.put("preventBackButtonFix", _preventBackButtonFix);
         dojoConfig.put("parseWidgets", _parseWidgets);
         
@@ -116,16 +113,19 @@
         // include the core dojo.js package
         
         str.append("<script type=\"text/javascript\" src=\"")
-        .append(_assetService.getLink(true,
-                _dojoSource.getResourceLocation()
-                .getPath()).getURL()).append("\"></script>");
+        .append(_dojoSource.buildURL()).append("\"></script>");
+        
+        // module path registration to tapestry javascript sources
+        
+        str.append("\n<script type=\"text/javascript\">\n")
+        .append("dojo.registerModulePath(\"tapestry\", \"")
+        .append(_tapestryPath.buildURL()).append("\");\n");
+        str.append("</script>\n");
         
         // include core tapestry.js package
         
         str.append("<script type=\"text/javascript\" src=\"")
-        .append(_assetService.getLink(true,
-                _tapestrySource.getResourceLocation()
-                .getPath()).getURL()).append("\"></script>");
+        .append(_tapestrySource.buildURL()).append("\"></script>");
         
         String logRequire = _consoleEnabled ? "dojo.require(\"dojo.debug.console\");\n"
                 : "dojo.require(\"dojo.logging.Logger\");\n";
@@ -279,11 +279,13 @@
     }
     
     /**
-     * Injected asset service.
-     * @param service
+     * Sets the path to the tapestry javascript modules. (Needed for dojo to resolve the 
+     * path to tapestry javascript, esp when overriding the default bundled dojo.)
+     * 
+     * @param tapestryPath The path to tapestry.
      */
-    public void setAssetService(IEngineService service)
+    public void setTapestryPath(IAsset tapestryPath)
     {
-        _assetService = service;
+        _tapestryPath = tapestryPath;
     }
 }

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/html/ScriptIncludes.jwc
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/html/ScriptIncludes.jwc?view=diff&rev=475491&r1=475490&r2=475491
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/html/ScriptIncludes.jwc (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/dojo/html/ScriptIncludes.jwc Wed Nov 15 15:24:20 2006
@@ -77,7 +77,14 @@
             If specified, allows for the default tapestry source included to be overriden.
         </description>
     </parameter>
-
+    
+    <parameter name="tapestryPath" default-value="asset:defaultTapestryPath">
+        <description>
+            Sets the tapestry path, needed for dojo to properly detect and find tapestry js modules
+            when overriding the default dojo bundled with tapestry.
+        </description>
+    </parameter>
+    
     <parameter name="dojoSource" default-value="asset:defaultDojoSource">
         <description>
             If specified, allows for the default dojo source included to be overriden.
@@ -90,14 +97,12 @@
             used by the djConfig.baseRelativePath javascript configuration variable in dojo.
         </description>
     </parameter>
-    
-    <inject property="assetService" object="service:tapestry.services.Asset" />
 
     <bean name="coreAjaxDelegate" class="org.apache.tapestry.dojo.AjaxShellDelegate">
         <set name="dojoSource" value="dojoSource" />
-        <set name="assetService" value="assetService" />
         <set name="dojoPath" value="dojoPath" />
         <set name="tapestrySource" value="tapestrySource" />
+        <set name="tapestryPath" value="tapestryPath" />
         <set name="logLevel" value="browserLogLevel" />
         <set name="debug" value="debugEnabled" />
         <set name="debugAtAllCosts" value="debugAtAllCosts" />
@@ -110,5 +115,6 @@
     <asset name="defaultDojoSource" path="classpath:/dojo/dojo.js" />
     <asset name="defaultDojoPath" path="classpath:/dojo/" />
     <asset name="defaultTapestrySource" path="classpath:/tapestry/core.js" />
+    <asset name="defaultTapestryPath" path="classpath:/tapestry/" />
     
 </component-specification>

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/html/Shell.jwc
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/html/Shell.jwc?view=diff&rev=475491&r1=475490&r2=475491
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/html/Shell.jwc (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/html/Shell.jwc Wed Nov 15 15:24:20 2006
@@ -136,6 +136,13 @@
         </description>
     </parameter>
 
+    <parameter name="tapestryPath" default-value="asset:defaultTapestryPath">
+        <description>
+            Sets the tapestry path, needed for dojo to properly detect and find tapestry js modules
+            when overriding the default dojo bundled with tapestry.
+        </description>
+    </parameter>
+
     <parameter name="dojoSource" default-value="asset:defaultDojoSource">
         <description>
             If specified, allows for the default dojo source included to be overriden.
@@ -153,13 +160,12 @@
     <inject property="pageService" object="engine-service:page" />
     <inject property="applicationSpecification" object="infrastructure:applicationSpecification" />
     <inject property="baseTagWriter" object="service:tapestry.url.BaseTagWriter" />
-    <inject property="assetService" object="service:tapestry.services.Asset" />
 
     <bean name="coreAjaxDelegate" class="org.apache.tapestry.dojo.AjaxShellDelegate">
         <set name="dojoSource" value="dojoSource" />
-        <set name="assetService" value="assetService" />
         <set name="dojoPath" value="dojoPath" />
         <set name="tapestrySource" value="tapestrySource" />
+        <set name="tapestryPath" value="tapestryPath" />
         <set name="logLevel" value="browserLogLevel" />
         <set name="debug" value="debugEnabled" />
         <set name="debugAtAllCosts" value="debugAtAllCosts" />
@@ -172,5 +178,6 @@
     <asset name="defaultDojoSource" path="classpath:/dojo/dojo.js" />
     <asset name="defaultDojoPath" path="classpath:/dojo/" />
     <asset name="defaultTapestrySource" path="classpath:/tapestry/core.js" />
+    <asset name="defaultTapestryPath" path="classpath:/tapestry/" />
     
 </component-specification>

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/dojo.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/dojo.js?view=diff&rev=475491&r1=475490&r2=475491
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/dojo.js (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/dojo.js Wed Nov 15 15:24:20 2006
@@ -54,7 +54,7 @@
 obj=obj[p[i]];}
 return true;};dojo.hostenv.normalizeLocale=function(_6e){return _6e?_6e.toLowerCase():dojo.locale;};dojo.hostenv.searchLocalePath=function(_6f,_70,_71){_6f=dojo.hostenv.normalizeLocale(_6f);var _72=_6f.split("-");var _73=[];for(var i=_72.length;i>0;i--){_73.push(_72.slice(0,i).join("-"));}
 _73.push(false);if(_70){_73.reverse();}
-for(var j=_73.length-1;j>=0;j--){var loc=_73[j]||"ROOT";var _77=_71(loc);if(_77){break;}}};dojo.hostenv.localesGenerated=["ROOT","es-es","es","it-it","pt-br","de","fr-fr","zh-cn","pt","en-us","zh","fr","zh-tw","it","en-gb","xx","de-de","ko-kr","ja-jp","ko","en","ja"];dojo.hostenv.registerNlsPrefix=function(){dojo.registerModulePath("nls","nls");};dojo.hostenv.preloadLocalizations=function(){if(dojo.hostenv.localesGenerated){dojo.hostenv.registerNlsPrefix();function preload(_78){dojo.log.debug("locale passed in is " + _78);_78=dojo.hostenv.normalizeLocale(_78);dojo.hostenv.searchLocalePath(_78,true,function(loc){for(var i=0;i<dojo.hostenv.localesGenerated.length;i++){if(dojo.hostenv.localesGenerated[i]==loc){dojo["require"]("nls.dojo_"+loc);return true;}}
+for(var j=_73.length-1;j>=0;j--){var loc=_73[j]||"ROOT";var _77=_71(loc);if(_77){break;}}};dojo.hostenv.localesGenerated=["ROOT","es-es","es","it-it","pt-br","de","fr-fr","zh-cn","pt","en-us","zh","fr","zh-tw","it","en-gb","xx","de-de","ko-kr","ja-jp","ko","en","ja"];dojo.hostenv.registerNlsPrefix=function(){dojo.registerModulePath("nls","nls");};dojo.hostenv.preloadLocalizations=function(){if(dojo.hostenv.localesGenerated){dojo.hostenv.registerNlsPrefix();function preload(_78){_78=dojo.hostenv.normalizeLocale(_78);dojo.hostenv.searchLocalePath(_78,true,function(loc){for(var i=0;i<dojo.hostenv.localesGenerated.length;i++){if(dojo.hostenv.localesGenerated[i]==loc){dojo["require"]("nls.dojo_"+loc);return true;}}
 return false;});}
 preload();var _7b=djConfig.extraLocale||[];for(var i=0;i<_7b.length;i++){preload(_7b[i]);}}
 dojo.hostenv.preloadLocalizations=function(){};};dojo.requireLocalization=function(_7d,_7e,_7f){dojo.hostenv.preloadLocalizations();var _80=[_7d,"nls",_7e].join(".");var _81=dojo.hostenv.findModule(_80);if(_81){if(djConfig.localizationComplete&&_81._built){return;}

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/namespace.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/namespace.js?view=diff&rev=475491&r1=475490&r2=475491
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/namespace.js (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/namespace.js Wed Nov 15 15:24:20 2006
@@ -17,6 +17,12 @@
 		return map[domain][name];
 	}
 	
-	dojo.registerNamespaceManifest("tapestry","../tapestry", "tapestry", "tapestry.widget");
+	var tpath;
+	if (dojo.hostenv.moduleHasPrefix("tapestry")){
+		tpath=dojo.hostenv.getModulePrefix("tapestry");
+	} else {
+		tpath="../tapestry";
+	}
+	dojo.registerNamespaceManifest("tapestry", tpath, "tapestry", "tapestry.widget");
 	dojo.registerNamespaceResolver("tapestry", resolveNamespace);
 })();

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/scripts/TestLibrary.xml
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/scripts/TestLibrary.xml?view=diff&rev=475491&r1=475490&r2=475491
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/scripts/TestLibrary.xml (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/scripts/TestLibrary.xml Wed Nov 15 15:24:20 2006
@@ -54,6 +54,10 @@
         <match>/script</match>
         <match>script</match>
         <match>/script</match>
+        <match>script</match>
+        <match>/script</match>
+        <match>script</match>
+        <match>/script</match>
 		<match>link</match>
 		<match>/head</match>
 		<match>body</match>	

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/scripts/TestSimple.xml
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/scripts/TestSimple.xml?view=diff&rev=475491&r1=475490&r2=475491
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/scripts/TestSimple.xml (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/scripts/TestSimple.xml Wed Nov 15 15:24:20 2006
@@ -47,6 +47,10 @@
         <match>/script</match>
         <match>script</match>
         <match>/script</match>
+        <match>script</match>
+        <match>/script</match>
+        <match>script</match>
+        <match>/script</match>
 		<match>/head</match>
 		<match>body</match>	
 		<match>br</match>	

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/dojo/AjaxShellDelegateTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/dojo/AjaxShellDelegateTest.java?view=diff&rev=475491&r1=475490&r2=475491
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/dojo/AjaxShellDelegateTest.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/dojo/AjaxShellDelegateTest.java Wed Nov 15 15:24:20 2006
@@ -13,14 +13,15 @@
 // limitations under the License.
 package org.apache.tapestry.dojo;
 
+import static org.easymock.EasyMock.expect;
+
 import java.util.Locale;
-import org.apache.tapestry.IPage;
-import static org.easymock.EasyMock.*;
 
 import org.apache.hivemind.Resource;
 import org.apache.tapestry.BaseComponentTestCase;
 import org.apache.tapestry.IAsset;
 import org.apache.tapestry.IMarkupWriter;
+import org.apache.tapestry.IPage;
 import org.apache.tapestry.IRequestCycle;
 import org.apache.tapestry.engine.IEngineService;
 import org.apache.tapestry.engine.ILink;
@@ -64,24 +65,26 @@
         IAsset dojoSource = newAsset();
         IAsset dojoPath = newAsset();
         IAsset tSource = newAsset();
-        IEngineService assetService = newEngineService();
+        IAsset tPath = newAsset();
         
         IRequestCycle cycle = newCycle();
         IMarkupWriter writer = newBufferWriter();
         
-        trainStaticPath(assetService, dojoPath, "/dojo/path");
+        expect(dojoPath.buildURL()).andReturn("http:///dojo/path");
         
         trainPageLocale(cycle, Locale.US);
         
-        trainStaticPath(assetService, dojoSource, "/dojo/path/dojo.js");
+        expect(dojoSource.buildURL()).andReturn("http:///dojo/path/dojo.js");
         
-        trainStaticPath(assetService, tSource, "/tapestry/tapestry.js");
+        expect(tPath.buildURL()).andReturn("/tapestry");
+        
+        expect(tSource.buildURL()).andReturn("/tapestry/tapestry.js");
         
         AjaxShellDelegate d = new AjaxShellDelegate();
-        d.setAssetService(assetService);
         d.setDojoPath(dojoPath);
         d.setDojoSource(dojoSource);
         d.setTapestrySource(tSource);
+        d.setTapestryPath(tPath);
         
         replay();
         
@@ -93,11 +96,14 @@
                 + "\"baseRelativePath\":\"http:///dojo/path\","
                 +"\"preventBackButtonFix\":false,\"parseWidgets\":false,\"locale\":\"en-us\"} </script>\n" + 
                 "\n" + 
-                " <script type=\"text/javascript\" src=\"http:///dojo/path/dojo.js\"></script>"
-                +"<script type=\"text/javascript\" src=\"http:///tapestry/tapestry.js\"></script>\n" + 
+                " <script type=\"text/javascript\" src=\"http:///dojo/path/dojo.js\"></script>\n"
+                + "<script type=\"text/javascript\">\n" + 
+                "dojo.registerModulePath(\"tapestry\", \"/tapestry\");\n" + 
+                "</script>\n" + 
+                "<script type=\"text/javascript\" src=\"/tapestry/tapestry.js\"></script>\n" + 
                 "<script type=\"text/javascript\">\n" + 
                 "dojo.require(\"tapestry.namespace\");\n" + 
-        "</script>" + SYSTEM_NEWLINE);
+                "</script>" + SYSTEM_NEWLINE);
     }
     
     public void test_Debug_Render()
@@ -105,24 +111,26 @@
         IAsset dojoSource = newAsset();
         IAsset dojoPath = newAsset();
         IAsset tSource = newAsset();
-        IEngineService assetService = newEngineService();
+        IAsset tPath = newAsset();
         
         IRequestCycle cycle = newCycle();
         IMarkupWriter writer = newBufferWriter();
         
-        trainStaticPath(assetService, dojoPath, "/dojo/path");
+        expect(dojoPath.buildURL()).andReturn("http:///dojo/path");
         
         trainPageLocale(cycle, Locale.UK);
         
-        trainStaticPath(assetService, dojoSource, "/dojo/path/dojo.js");
+        expect(dojoSource.buildURL()).andReturn("http:///dojo/path/dojo.js");
+        
+        expect(tPath.buildURL()).andReturn("/tapestry");
         
-        trainStaticPath(assetService, tSource, "/tapestry/tapestry.js");
+        expect(tSource.buildURL()).andReturn("/tapestry/tapestry.js");
         
         AjaxShellDelegate d = new AjaxShellDelegate();
-        d.setAssetService(assetService);
         d.setDojoPath(dojoPath);
         d.setDojoSource(dojoSource);
         d.setTapestrySource(tSource);
+        d.setTapestryPath(tPath);
         d.setDebug(true);
         d.setLogLevel(AjaxShellDelegate.BROWSER_LOG_DEBUG);
         d.setConsoleEnabled(true);
@@ -137,12 +145,15 @@
                 + "\"baseRelativePath\":\"http:///dojo/path\","
                 +"\"preventBackButtonFix\":false,\"parseWidgets\":false,\"locale\":\"en-gb\"} </script>\n" + 
                 "\n" + 
-                " <script type=\"text/javascript\" src=\"http:///dojo/path/dojo.js\"></script>"
-                +"<script type=\"text/javascript\" src=\"http:///tapestry/tapestry.js\"></script>\n" + 
+                " <script type=\"text/javascript\" src=\"http:///dojo/path/dojo.js\"></script>\n"
+                + "<script type=\"text/javascript\">\n" + 
+                "dojo.registerModulePath(\"tapestry\", \"/tapestry\");\n" + 
+                "</script>\n" + 
+                "<script type=\"text/javascript\" src=\"/tapestry/tapestry.js\"></script>\n" + 
                 "<script type=\"text/javascript\">\n" + 
                 "dojo.require(\"dojo.debug.console\");\n" + 
-                "dojo.log.setLevel(dojo.log.getLevel(\"DEBUG\"));\n" + 
+                "dojo.log.setLevel(dojo.log.getLevel(\"DEBUG\"));\n" +
                 "dojo.require(\"tapestry.namespace\");\n" + 
-        "</script>" + SYSTEM_NEWLINE);
+                "</script>" + SYSTEM_NEWLINE);
     }
 }