You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shindig.apache.org by mh...@apache.org on 2011/03/15 00:03:36 UTC

svn commit: r1081602 - in /shindig/trunk: features/src/main/javascript/features/container/ features/src/main/javascript/features/core.io/ features/src/main/javascript/features/osapi/ features/src/main/javascript/features/rpc/ java/gadgets/src/main/java...

Author: mhermanto
Date: Mon Mar 14 23:03:36 2011
New Revision: 1081602

URL: http://svn.apache.org/viewvc?rev=1081602&view=rev
Log:
More improvements/changes for dynamic JS compilation.
- Enable common container (and dependent core.io) for dynamic JS compilation. 
- Streamline RenderingContext and JsCompileMode defaults.
- Allow setting of JsCompileMode on JsUri.
- Extern JsUri now supports JsCompileMode.

http://codereview.appspot.com/4276046/

Modified:
    shindig/trunk/features/src/main/javascript/features/container/feature.xml
    shindig/trunk/features/src/main/javascript/features/container/init.js
    shindig/trunk/features/src/main/javascript/features/container/service.js
    shindig/trunk/features/src/main/javascript/features/core.io/io.js
    shindig/trunk/features/src/main/javascript/features/osapi/gadgetsrpctransport.js
    shindig/trunk/features/src/main/javascript/features/rpc/feature.xml
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/JsCompileMode.java
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/RenderingContext.java
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultJsUriManager.java
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/JsUriManager.java
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultJsUriManagerTest.java

Modified: shindig/trunk/features/src/main/javascript/features/container/feature.xml
URL: http://svn.apache.org/viewvc/shindig/trunk/features/src/main/javascript/features/container/feature.xml?rev=1081602&r1=1081601&r2=1081602&view=diff
==============================================================================
--- shindig/trunk/features/src/main/javascript/features/container/feature.xml (original)
+++ shindig/trunk/features/src/main/javascript/features/container/feature.xml Mon Mar 14 23:03:36 2011
@@ -62,13 +62,14 @@ under the License.
       <exports type="js">shindig.container.ContainerRender.TEST</exports>
       <exports type="js">shindig.container.ContainerRender.VIEW</exports>
       <exports type="js">shindig.container.ContainerRender.WIDTH</exports>
-      <exports type="js">shindig.container.GadgetSite</exports>
       <exports type="js">shindig.container.GadgetSite.prototype.setHeight</exports>
       <exports type="js">shindig.container.GadgetSite.prototype.setWidth</exports>
       <exports type="js">shindig.container.GadgetSite.prototype.getId</exports>
       <exports type="js">shindig.container.GadgetSite.prototype.getActiveGadgetHolder</exports>
       <exports type="js">shindig.container.GadgetSite.prototype.rpcCall</exports>
       <exports type="js">shindig.container.GadgetSite.prototype.close</exports>
+      <!-- TODO: deprecate this. It should have the same id as siteId -->
+      <exports type="js">shindig.container.GadgetHolder.prototype.getIframeId</exports>
     </api>
   </container>
 </feature>

Modified: shindig/trunk/features/src/main/javascript/features/container/init.js
URL: http://svn.apache.org/viewvc/shindig/trunk/features/src/main/javascript/features/container/init.js?rev=1081602&r1=1081601&r2=1081602&view=diff
==============================================================================
--- shindig/trunk/features/src/main/javascript/features/container/init.js (original)
+++ shindig/trunk/features/src/main/javascript/features/container/init.js Mon Mar 14 23:03:36 2011
@@ -27,11 +27,11 @@
   function initializeConfig() {
     gadgets.config.init({
       'rpc': {
-        parentRelayUrl: ''
+        'parentRelayUrl': ''
       },
       'core.io': {
-        jsonProxyUrl: 'http://%host%/gadgets/makeRequest',
-        proxyUrl: 'http://%host%/gadgets/proxy' +
+        'jsonProxyUrl': 'http://%host%/gadgets/makeRequest',
+        'proxyUrl': 'http://%host%/gadgets/proxy' +
             '?refresh=%refresh%' +
             '&container=%container%%rewriteMime%' +
             '&gadget=%gadget%/%rawurl%'

Modified: shindig/trunk/features/src/main/javascript/features/container/service.js
URL: http://svn.apache.org/viewvc/shindig/trunk/features/src/main/javascript/features/container/service.js?rev=1081602&r1=1081601&r2=1081602&view=diff
==============================================================================
--- shindig/trunk/features/src/main/javascript/features/container/service.js (original)
+++ shindig/trunk/features/src/main/javascript/features/container/service.js Mon Mar 14 23:03:36 2011
@@ -100,12 +100,12 @@ shindig.container.Service.prototype.getG
   } else {
     var self = this;
     request = shindig.container.util.newMetadataRequest(uncachedUrls);
-    osapi.gadgets.metadata(request).execute(function(response) {
+    osapi['gadgets']['metadata'](request).execute(function(response) {
 
       // If response entirely fails, augment individual errors.
-      if (response.error) {
-        for (var i = 0; i < request.ids.length; i++) {
-          finalResponse[id] = { 'error' : response.error };
+      if (response['error']) {
+        for (var i = 0; i < request['ids'].length; i++) {
+          finalResponse[id] = { 'error' : response['error'] };
         }
 
       // Otherwise, cache response. Augment final response with server response.
@@ -192,13 +192,13 @@ shindig.container.Service.prototype.getG
 
   // Do not check against cache. Always do a server fetch.
   var self = this;
-  osapi.gadgets.token(request).execute(function(response) {
+  osapi['gadgets']['token'](request).execute(function(response) {
     var finalResponse = {};
 
     // If response entirely fails, augment individual errors.
-    if (response.error) {
-      for (var i = 0; i < request.ids.length; i++) {
-        finalResponse[id] = { 'error' : response.error };
+    if (response['error']) {
+      for (var i = 0; i < request['ids'].length; i++) {
+        finalResponse[id] = { 'error' : response['error'] };
       }
 
     // Otherwise, cache response. Augment final response with server response.
@@ -308,8 +308,8 @@ shindig.container.Service.prototype.getU
 shindig.container.Service.prototype.filterCachedDataByRequest_ = function(
     data, request, filterFunc) {
   var result = {};
-  for (var i = 0; i < request.ids.length; i++) {
-    var id = request.ids[i];
+  for (var i = 0; i < request['ids'].length; i++) {
+    var id = request['ids'][i];
     var cachedData = data[id];
     if (filterFunc(cachedData)) {
       result[id] = cachedData;

Modified: shindig/trunk/features/src/main/javascript/features/core.io/io.js
URL: http://svn.apache.org/viewvc/shindig/trunk/features/src/main/javascript/features/core.io/io.js?rev=1081602&r1=1081601&r2=1081602&view=diff
==============================================================================
--- shindig/trunk/features/src/main/javascript/features/core.io/io.js (original)
+++ shindig/trunk/features/src/main/javascript/features/core.io/io.js Mon Mar 14 23:03:36 2011
@@ -74,27 +74,27 @@ gadgets.io = function() {
    * @return {boolean} true if the xobj is not ready to be processed.
    */
   function hadError(xobj, callback) {
-    if (xobj.readyState !== 4) {
+    if (xobj['readyState'] !== 4) {
       return true;
     }
     try {
-      if (xobj.status !== 200) {
-        var error = ('' + xobj.status);
-        if (xobj.responseText) {
-          error = error + ' ' + xobj.responseText;
+      if (xobj['status'] !== 200) {
+        var error = ('' + xobj['status']);
+        if (xobj['responseText']) {
+          error = error + ' ' + xobj['responseText'];
         }
         callback({
-          errors: [error],
-          rc: xobj.status,
-          text: xobj.responseText
+          'errors': [error],
+          'rc': xobj['status'],
+          'text': xobj['responseText']
         });
         return true;
       }
     } catch (e) {
       callback({
-        errors: [e.number + ' Error not specified'],
-        rc: e.number,
-        text: e.description
+        'errors': [e['number'] + ' Error not specified'],
+        'rc': e['number'],
+        'text': e['description']
       });
       return true;
     }
@@ -114,7 +114,7 @@ gadgets.io = function() {
       return;
     }
     var data = {
-      body: xobj.responseText
+      'body': xobj['responseText']
     };
     callback(transformResponseData(params, data));
   }
@@ -133,7 +133,7 @@ gadgets.io = function() {
     if (hadError(xobj, callback)) {
       return;
     }
-    var txt = xobj.responseText;
+    var txt = xobj['responseText'];
 
     // remove unparseable cruft used to prevent cross-site script inclusion
     var offset = txt.indexOf(UNPARSEABLE_CRUFT) + UNPARSEABLE_CRUFT.length;
@@ -148,12 +148,12 @@ gadgets.io = function() {
     var data = eval('(' + txt + ')');
     data = data[url];
     // Save off any transient OAuth state the server wants back later.
-    if (data.oauthState) {
-      oauthState = data.oauthState;
+    if (data['oauthState']) {
+      oauthState = data['oauthState'];
     }
     // Update the security token if the server sent us a new one
-    if (data.st) {
-      shindig.auth.updateSecurityToken(data.st);
+    if (data['st']) {
+      shindig.auth.updateSecurityToken(data['st']);
     }
     callback(transformResponseData(params, data));
   }
@@ -168,32 +168,32 @@ gadgets.io = function() {
     // Sometimes rc is not present, generally when used
     // by jsonrpccontainer, so assume 200 in its absence.
     var resp = {
-      text: data.body,
-      rc: data.rc || 200,
-      headers: data.headers,
-      oauthApprovalUrl: data.oauthApprovalUrl,
-      oauthError: data.oauthError,
-      oauthErrorText: data.oauthErrorText,
-      errors: []
+      'text': data['body'],
+      'rc': data['rc'] || 200,
+      'headers': data['headers'],
+      'oauthApprovalUrl': data['oauthApprovalUrl'],
+      'oauthError': data['oauthError'],
+      'oauthErrorText': data['oauthErrorText'],
+      'errors': []
     };
 
-    if (resp.rc < 200 || resp.rc >= 400) {
-      resp.errors = [resp.rc + ' Error'];
-    } else if (resp.text) {
-      if (resp.rc >= 300 && resp.rc < 400) {
+    if (resp['rc'] < 200 || resp['rc'] >= 400) {
+      resp['errors'] = [resp['rc'] + ' Error'];
+    } else if (resp['text']) {
+      if (resp['rc'] >= 300 && resp['rc'] < 400) {
         // Redirect pages will usually contain arbitrary
         // HTML which will fail during parsing, inadvertently
         // causing a 500 response. Thus we treat as text.
-        params.CONTENT_TYPE = 'TEXT';
+        params['CONTENT_TYPE'] = 'TEXT';
       }
-      switch (params.CONTENT_TYPE) {
+      switch (params['CONTENT_TYPE']) {
         case 'JSON':
         case 'FEED':
-          resp.data = gadgets.json.parse(resp.text);
-          if (!resp.data) {
-            resp.errors.push('500 Failed to parse JSON');
-            resp.rc = 500;
-            resp.data = null;
+          resp['data'] = gadgets.json.parse(resp.text);
+          if (!resp['data']) {
+            resp['errors'].push('500 Failed to parse JSON');
+            resp['rc'] = 500;
+            resp['data'] = null;
           }
           break;
         case 'DOM':
@@ -203,25 +203,25 @@ gadgets.io = function() {
             dom.async = false;
             dom.validateOnParse = false;
             dom.resolveExternals = false;
-            if (!dom.loadXML(resp.text)) {
-              resp.errors.push('500 Failed to parse XML');
-              resp.rc = 500;
+            if (!dom.loadXML(resp['text'])) {
+              resp['errors'].push('500 Failed to parse XML');
+              resp['rc'] = 500;
             } else {
-              resp.data = dom;
+              resp['data'] = dom;
             }
           } else {
             var parser = new DOMParser();
-            dom = parser.parseFromString(resp.text, 'text/xml');
+            dom = parser.parseFromString(resp['text'], 'text/xml');
             if ('parsererror' === dom.documentElement.nodeName) {
-              resp.errors.push('500 Failed to parse XML');
-              resp.rc = 500;
+              resp['errors'].push('500 Failed to parse XML');
+              resp['rc'] = 500;
             } else {
-              resp.data = dom;
+              resp['data'] = dom;
             }
           }
           break;
         default:
-          resp.data = resp.text;
+          resp['data'] = resp['text'];
           break;
       }
     }
@@ -293,20 +293,20 @@ gadgets.io = function() {
           // Only satisfy once
           delete gadgets.io.preloaded_[i];
 
-          if (preload.rc !== 200) {
-            callback({rc: preload.rc, errors: [preload.rc + ' Error']});
+          if (preload['rc'] !== 200) {
+            callback({'rc': preload['rc'], 'errors': [preload['rc'] + ' Error']});
           } else {
-            if (preload.oauthState) {
-              oauthState = preload.oauthState;
+            if (preload['oauthState']) {
+              oauthState = preload['oauthState'];
             }
             var resp = {
-              body: preload.body,
-              rc: preload.rc,
-              headers: preload.headers,
-              oauthApprovalUrl: preload.oauthApprovalUrl,
-              oauthError: preload.oauthError,
-              oauthErrorText: preload.oauthErrorText,
-              errors: []
+              'body': preload['body'],
+              'rc': preload['rc'],
+              'headers': preload['headers'],
+              'oauthApprovalUrl': preload['oauthApprovalUrl'],
+              'oauthError': preload['oauthError'],
+              'oauthErrorText': preload['oauthErrorText'],
+              'errors': []
             };
             callback(transformResponseData(params, resp));
           }
@@ -326,8 +326,8 @@ gadgets.io = function() {
   }
 
   var requiredConfig = {
-    proxyUrl: new gadgets.config.RegExValidator(/.*%(raw)?url%.*/),
-    jsonProxyUrl: gadgets.config.NonEmptyStringValidator
+    'proxyUrl': new gadgets.config.RegExValidator(/.*%(raw)?url%.*/),
+    'jsonProxyUrl': gadgets.config.NonEmptyStringValidator
   };
   gadgets.config.register('core.io', requiredConfig, init);
 
@@ -358,13 +358,13 @@ gadgets.io = function() {
 
       var params = opt_params || {};
 
-      var httpMethod = params.METHOD || 'GET';
-      var refreshInterval = params.REFRESH_INTERVAL;
+      var httpMethod = params['METHOD'] || 'GET';
+      var refreshInterval = params['REFRESH_INTERVAL'];
 
       // Check if authorization is requested
       var auth, st;
-      if (params.AUTHORIZATION && params.AUTHORIZATION !== 'NONE') {
-        auth = params.AUTHORIZATION.toLowerCase();
+      if (params['AUTHORIZATION'] && params['AUTHORIZATION'] !== 'NONE') {
+        auth = params['AUTHORIZATION'].toLowerCase();
         st = shindig.auth.getSecurityToken();
       } else {
         // Unauthenticated GET requests are cacheable
@@ -375,17 +375,17 @@ gadgets.io = function() {
 
       // Include owner information?
       var signOwner = true;
-      if (typeof params.OWNER_SIGNED !== 'undefined') {
-        signOwner = params.OWNER_SIGNED;
+      if (typeof params['OWNER_SIGNED'] !== 'undefined') {
+        signOwner = params['OWNER_SIGNED'];
       }
 
       // Include viewer information?
       var signViewer = true;
-      if (typeof params.VIEWER_SIGNED !== 'undefined') {
-        signViewer = params.VIEWER_SIGNED;
+      if (typeof params['VIEWER_SIGNED'] !== 'undefined') {
+        signViewer = params['VIEWER_SIGNED'];
       }
 
-      var headers = params.HEADERS || {};
+      var headers = params['HEADERS'] || {};
       if (httpMethod === 'POST' && !headers['Content-Type']) {
         headers['Content-Type'] = 'application/x-www-form-urlencoded';
       }
@@ -393,31 +393,31 @@ gadgets.io = function() {
       var urlParams = gadgets.util.getUrlParameters();
 
       var paramData = {
-        url: url,
-        httpMethod: httpMethod,
-        headers: gadgets.io.encodeValues(headers, false),
-        postData: params.POST_DATA || '',
-        authz: auth || '',
-        st: st || '',
-        contentType: params.CONTENT_TYPE || 'TEXT',
-        numEntries: params.NUM_ENTRIES || '3',
-        getSummaries: !!params.GET_SUMMARIES,
-        signOwner: signOwner,
-        signViewer: signViewer,
-        gadget: urlParams['url'],
-        container: urlParams['container'] || urlParams['synd'] || 'default',
+        'url': url,
+        'httpMethod': httpMethod,
+        'headers': gadgets.io.encodeValues(headers, false),
+        'postData': params['POST_DATA'] || '',
+        'authz': auth || '',
+        'st': st || '',
+        'contentType': params['CONTENT_TYPE'] || 'TEXT',
+        'numEntries': params['NUM_ENTRIES'] || '3',
+        'getSummaries': !!params['GET_SUMMARIES'],
+        'signOwner': signOwner,
+        'signViewer': signViewer,
+        'gadget': urlParams['url'],
+        'container': urlParams['container'] || urlParams['synd'] || 'default',
         // should we bypass gadget spec cache (e.g. to read OAuth provider URLs)
-        bypassSpecCache: gadgets.util.getUrlParameters()['nocache'] || '',
-        getFullHeaders: !!params.GET_FULL_HEADERS
+        'bypassSpecCache': gadgets.util.getUrlParameters()['nocache'] || '',
+        'getFullHeaders': !!params['GET_FULL_HEADERS']
       };
 
       // OAuth goodies
       if (auth === 'oauth' || auth === 'signed') {
         if (gadgets.io.oauthReceivedCallbackUrl_) {
-          paramData.OAUTH_RECEIVED_CALLBACK = gadgets.io.oauthReceivedCallbackUrl_;
+          paramData['OAUTH_RECEIVED_CALLBACK'] = gadgets.io.oauthReceivedCallbackUrl_;
           gadgets.io.oauthReceivedCallbackUrl_ = null;
         }
-        paramData.oauthState = oauthState || '';
+        paramData['oauthState'] = oauthState || '';
         // Just copy the OAuth parameters into the req to the server
         for (var opt in params) {
           if (params.hasOwnProperty(opt)) {
@@ -458,8 +458,8 @@ gadgets.io = function() {
      */
     makeNonProxiedRequest: function(relativeUrl, callback, opt_params, opt_headers) {
       var params = opt_params || {};
-      makeXhrRequest(relativeUrl, relativeUrl, callback, params.POST_DATA,
-          params.METHOD, params, processNonProxiedResponse, opt_headers);
+      makeXhrRequest(relativeUrl, relativeUrl, callback, params['POST_DATA'],
+          params['METHOD'], params, processNonProxiedResponse, opt_headers);
     },
 
     /**
@@ -516,7 +516,7 @@ gadgets.io = function() {
      */
     getProxyUrl: function(url, opt_params) {
       var params = opt_params || {};
-      var refresh = params.REFRESH_INTERVAL;
+      var refresh = params['REFRESH_INTERVAL'];
       if (refresh === undefined) {
         refresh = '3600';
       }
@@ -524,7 +524,7 @@ gadgets.io = function() {
       var urlParams = gadgets.util.getUrlParameters();
 
       var rewriteMimeParam =
-          params.rewriteMime ? '&rewriteMime=' + encodeURIComponent(params.rewriteMime) : '';
+          params['rewriteMime'] ? '&rewriteMime=' + encodeURIComponent(params['rewriteMime']) : '';
       var ret = config['proxyUrl'].replace('%url%', encodeURIComponent(url)).
           replace('%host%', document.location.host).
           replace('%rawurl%', url).

Modified: shindig/trunk/features/src/main/javascript/features/osapi/gadgetsrpctransport.js
URL: http://svn.apache.org/viewvc/shindig/trunk/features/src/main/javascript/features/osapi/gadgetsrpctransport.js?rev=1081602&r1=1081601&r2=1081602&view=diff
==============================================================================
--- shindig/trunk/features/src/main/javascript/features/osapi/gadgetsrpctransport.js (original)
+++ shindig/trunk/features/src/main/javascript/features/osapi/gadgetsrpctransport.js Mon Mar 14 23:03:36 2011
@@ -36,13 +36,13 @@ if (gadgets && gadgets.rpc) { //Dont bin
     function execute(requests, callback) {
       var rpcCallback = function(response) {
         if (!response) {
-          callback({ code: 500, message: 'Container refused the request' });
-        } else if (response.error) {
+          callback({ 'code': 500, 'message': 'Container refused the request' });
+        } else if (response['error']) {
           callback(response);
         } else {
           var responseMap = {};
           for (var i = 0; i < response.length; i++) {
-            responseMap[response[i].id] = response[i];
+            responseMap[response[i]['id']] = response[i];
           }
           callback(responseMap);
         }
@@ -95,7 +95,7 @@ if (gadgets && gadgets.rpc) { //Dont bin
 
         // Call for the container methods and bind them to osapi.
         osapi.container.listMethods({}).execute(function(response) {
-          if (!response.error) {
+          if (!response['error']) {
             for (var i = 0; i < response.length; i++) {
               // do not rebind container.listMethods implementation
               if (response[i] != 'container.listMethods') {

Modified: shindig/trunk/features/src/main/javascript/features/rpc/feature.xml
URL: http://svn.apache.org/viewvc/shindig/trunk/features/src/main/javascript/features/rpc/feature.xml?rev=1081602&r1=1081601&r2=1081602&view=diff
==============================================================================
--- shindig/trunk/features/src/main/javascript/features/rpc/feature.xml (original)
+++ shindig/trunk/features/src/main/javascript/features/rpc/feature.xml Mon Mar 14 23:03:36 2011
@@ -24,7 +24,6 @@ specific language governing permissions 
   <dependency>core.util.urlparams</dependency>
   <all>
     <api>
-      <exports type="js">gadgets.rpc</exports>
       <exports type="js">gadgets.rpc.config</exports>
       <exports type="js">gadgets.rpc.register</exports>
       <exports type="js">gadgets.rpc.unregister</exports>

Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/JsCompileMode.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/JsCompileMode.java?rev=1081602&r1=1081601&r2=1081602&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/JsCompileMode.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/JsCompileMode.java Mon Mar 14 23:03:36 2011
@@ -50,4 +50,8 @@ public enum JsCompileMode {
     return JsCompileMode.BUILD_TIME;
   }
 
+  public static JsCompileMode getDefault() {
+    return JsCompileMode.BUILD_TIME;
+  }
+
 }
\ No newline at end of file

Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/RenderingContext.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/RenderingContext.java?rev=1081602&r1=1081601&r2=1081602&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/RenderingContext.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/RenderingContext.java Mon Mar 14 23:03:36 2011
@@ -38,7 +38,7 @@ public enum RenderingContext {
   // identical to processing under GADGET, but some operations may be safely
   // skipped, such as preload processing.
   METADATA(null, null, null),
-  
+
   // Allows specification of feature JS with an <all> tag. Specially handled in
   // FeatureRegistry: content specified in an <all> tag is chosen if there are
   // no <gadget> or <container> sections. This avoids, for many libs where the JS
@@ -69,16 +69,18 @@ public enum RenderingContext {
 
   public static RenderingContext valueOfParam(String param) {
     // Exception: when no &c= parameter provided or bad, default to GADGET.
-    RenderingContext c = RenderingContext.GADGET;
     if (param != null) {
       for (RenderingContext rc : RenderingContext.values()) {
         String rcParam = rc.getParamValue();
         if (rcParam != null && rcParam.equals(param)) {
-          c = rc;
-          break;
+          return rc;
         }
       }
     }
-    return c;
+    return getDefault();
+  }
+
+  public static RenderingContext getDefault() {
+    return RenderingContext.GADGET;
   }
 }

Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultJsUriManager.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultJsUriManager.java?rev=1081602&r1=1081601&r2=1081602&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultJsUriManager.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/DefaultJsUriManager.java Mon Mar 14 23:03:36 2011
@@ -28,6 +28,7 @@ import org.apache.shindig.common.uri.Uri
 import org.apache.shindig.config.ContainerConfig;
 import org.apache.shindig.gadgets.GadgetException;
 import org.apache.shindig.gadgets.GadgetException.Code;
+import org.apache.shindig.gadgets.JsCompileMode;
 import org.apache.shindig.gadgets.http.HttpResponse;
 import org.apache.shindig.gadgets.uri.UriCommon.Param;
 
@@ -73,7 +74,7 @@ public class DefaultJsUriManager impleme
     if (!ctx.getLoadedLibs().isEmpty()) {
       uri.addQueryParameter(Param.LOADED_LIBS.getKey(), addJsLibs(ctx.getLoadedLibs()));
     }
-    
+
     // Standard container param, as JS may be container-specific.
     uri.addQueryParameter(Param.CONTAINER.getKey(), container);
 
@@ -100,11 +101,16 @@ public class DefaultJsUriManager impleme
     if (ctx.isJsload()) {
       uri.addQueryParameter(Param.JSLOAD.getKey(), "1");
     }
-    
+
     if (ctx.isNohint()) {
       uri.addQueryParameter(Param.NO_HINT.getKey(), "1");
     }
 
+    JsCompileMode mode = ctx.getCompileMode();
+    if (mode != null && mode != JsCompileMode.getDefault()) {
+      uri.addQueryParameter(Param.COMPILE_MODE.getKey(), mode.getParamValue());
+    }
+
     // Finally, version it, but only if !nocache.
     if (versioner != null && !ctx.isNoCache()) {
       uri.addQueryParameter(Param.VERSION.getKey(),

Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/JsUriManager.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/JsUriManager.java?rev=1081602&r1=1081601&r2=1081602&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/JsUriManager.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/JsUriManager.java Mon Mar 14 23:03:36 2011
@@ -55,11 +55,11 @@ public interface JsUriManager {
     private final Collection<String> libs;
     private final Collection<String> loadedLibs;
     private final String onload;
-    private final JsCompileMode compileMode;
-    private boolean jsload;
-    private boolean nohint;
     private final RenderingContext context;
     private final Uri origUri;
+    private JsCompileMode compileMode;
+    private boolean jsload;
+    private boolean nohint;
 
     public JsUri(UriStatus status, Uri origUri, Collection<String> libs, Collection<String> have) {
       super(status, origUri);
@@ -72,8 +72,8 @@ public interface JsUriManager {
         this.onload = origUri.getQueryParameter(Param.ONLOAD.getKey());
         this.nohint = "1".equals(origUri.getQueryParameter(Param.NO_HINT.getKey()));
       } else {
-        this.context = RenderingContext.GADGET;
-        this.compileMode = JsCompileMode.BUILD_TIME;
+        this.context = RenderingContext.getDefault();
+        this.compileMode = JsCompileMode.getDefault();
         this.jsload = false;
         this.onload = null;
         this.nohint = false;
@@ -90,7 +90,7 @@ public interface JsUriManager {
     public JsUri(UriStatus status, Collection<String> libs, RenderingContext context,
                  String onload, boolean jsload, boolean nohint) {
       super(status, null);
-      this.compileMode = JsCompileMode.BUILD_TIME;
+      this.compileMode = JsCompileMode.getDefault();
       this.onload = onload;
       this.jsload = jsload;
       this.nohint = nohint;
@@ -102,11 +102,11 @@ public interface JsUriManager {
 
     public JsUri(Gadget gadget, Collection<String> libs) {
       super(gadget);
-      this.compileMode = JsCompileMode.BUILD_TIME;
+      this.compileMode = JsCompileMode.getDefault();
       this.onload = null;
       this.jsload = false;
       this.nohint = false;
-      this.context = RenderingContext.GADGET;
+      this.context = RenderingContext.getDefault();;
       this.libs = nonNullLibs(libs);
       this.loadedLibs = EMPTY_COLL;
       this.origUri = null;
@@ -115,7 +115,7 @@ public interface JsUriManager {
     public JsUri(Integer refresh, boolean debug, boolean noCache, String container, String gadget,
         Collection<String> libs, Collection<String> loadedLibs, String onload, boolean jsload, boolean nohint, RenderingContext context, Uri origUri) {
       super(null, refresh, debug, noCache, container, gadget);
-      this.compileMode = JsCompileMode.BUILD_TIME;
+      this.compileMode = JsCompileMode.getDefault();
       this.onload = onload;
       this.jsload = jsload;
       this.nohint = nohint;
@@ -161,6 +161,10 @@ public interface JsUriManager {
       return compileMode;
     }
 
+    public void setCompileMode(JsCompileMode mode) {
+      this.compileMode = mode;
+    }
+
     public String getOnload() {
       return onload;
     }

Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultJsUriManagerTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultJsUriManagerTest.java?rev=1081602&r1=1081601&r2=1081602&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultJsUriManagerTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/DefaultJsUriManagerTest.java Mon Mar 14 23:03:36 2011
@@ -32,6 +32,7 @@ import com.google.common.collect.Lists;
 import org.apache.shindig.common.uri.Uri;
 import org.apache.shindig.config.ContainerConfig;
 import org.apache.shindig.gadgets.GadgetException;
+import org.apache.shindig.gadgets.JsCompileMode;
 import org.apache.shindig.gadgets.RenderingContext;
 import org.apache.shindig.gadgets.uri.JsUriManager.JsUri;
 import org.apache.shindig.gadgets.uri.JsUriManager.Versioner;
@@ -86,7 +87,8 @@ public class DefaultJsUriManagerTest {
     ContainerConfig config = mockConfig("http://www.js.org", "/gadgets/js/");
     TestDefaultJsUriManager manager = makeManager(config, null);
     List<String> extern = Lists.newArrayList("feature");
-    JsUri ctx = mockGadgetContext(false, false, extern, null, false, ImmutableMap.of("test", "1"));
+    JsUri ctx = mockGadgetContext(false, false, extern, null, false,
+        ImmutableMap.of("test", "1"), null);
     Uri jsUri = manager.makeExternJsUri(ctx);
     assertFalse(manager.hadError());
     assertEquals("http", jsUri.getScheme());
@@ -161,7 +163,8 @@ public class DefaultJsUriManagerTest {
     ContainerConfig config = mockConfig("http://www.js.org", "/gadgets/js/");
     TestDefaultJsUriManager manager = makeManager(config, null);
     List<String> extern = Lists.newArrayList("feature", "another");
-    JsUri ctx = mockGadgetContext(false, false, extern, null, true, null);
+    JsUri ctx = mockGadgetContext(false, false, extern, null, true, null,
+        JsCompileMode.ALL_RUN_TIME);
     Uri jsUri = manager.makeExternJsUri(ctx);
     assertFalse(manager.hadError());
     assertEquals("http", jsUri.getScheme());
@@ -170,10 +173,12 @@ public class DefaultJsUriManagerTest {
     assertEquals(CONTAINER, jsUri.getQueryParameter(Param.CONTAINER.getKey()));
     assertEquals("0", jsUri.getQueryParameter(Param.NO_CACHE.getKey()));
     assertEquals("0", jsUri.getQueryParameter(Param.DEBUG.getKey()));
+    assertEquals(JsCompileMode.ALL_RUN_TIME.getParamValue(),
+        jsUri.getQueryParameter(Param.COMPILE_MODE.getKey()));
     assertEquals(RenderingContext.CONTAINER.getParamValue(),
         jsUri.getQueryParameter(Param.CONTAINER_MODE.getKey()));
   }
-  
+
   @Test
   public void makeJsUriWithLoadedLibraries() throws Exception {
     ContainerConfig config = mockConfig("http://www.js.org", "/gadgets/js/");
@@ -388,17 +393,18 @@ public class DefaultJsUriManagerTest {
 
   private JsUri mockGadgetContext(boolean nocache, boolean debug, List<String> extern) {
     return mockGadgetContext(nocache, debug, extern, ImmutableList.<String>of(), false,
-    null);
+    null, null);
   }
 
   private JsUri mockGadgetContext(
       boolean nocache, boolean debug, List<String> extern, List<String> loaded) {
-    return mockGadgetContext(nocache, debug, extern, loaded, false, null);
+    return mockGadgetContext(nocache, debug, extern, loaded, false, null, null);
   }
 
   private JsUri mockGadgetContext(boolean nocache, boolean debug,
-                                  List<String> extern, List<String> loaded,
-                                  boolean isContainer, Map<String, String> params) {
+      List<String> extern, List<String> loaded,
+      boolean isContainer, Map<String, String> params,
+      JsCompileMode compileMode) {
     JsUri context = createMock(JsUri.class);
     expect(context.getContainer()).andStubReturn(CONTAINER);
     expect(context.isNoCache()).andStubReturn(nocache);
@@ -414,6 +420,7 @@ public class DefaultJsUriManagerTest {
     expect(context.isNohint()).andStubReturn(false);
     expect(context.getExtensionParams()).andStubReturn(params);
     expect(context.getOrigUri()).andStubReturn(null);
+    expect(context.getCompileMode()).andStubReturn(compileMode);
     replay(context);
     return context;
   }