Author: mhermanto
Date: Thu Feb 24 23:15:58 2011
New Revision: 1074351

URL: http://svn.apache.org/viewvc?rev=1074351&view=rev
Log:
JS loader now executes a callback (if globally specified).
http://codereview.appspot.com/4182053/

Added:
    
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/js/AddJsLoadCallbackProcessor.java
    
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/js/AddJsLoadCallbackProcessorTest.java
Modified:
    
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/js/InjectJsInfoVariableProcessor.java
    
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/js/JavascriptModule.java

Added: 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/js/AddJsLoadCallbackProcessor.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/js/AddJsLoadCallbackProcessor.java?rev=1074351&view=auto
==============================================================================
--- 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/js/AddJsLoadCallbackProcessor.java
 (added)
+++ 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/js/AddJsLoadCallbackProcessor.java
 Thu Feb 24 23:15:58 2011
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+
+package org.apache.shindig.gadgets.js;
+
+import com.google.common.annotations.VisibleForTesting;
+
+import org.apache.shindig.gadgets.uri.JsUriManager.JsUri;
+
+public class AddJsLoadCallbackProcessor implements JsProcessor {
+  
+  @VisibleForTesting
+  static final String JSL_CALLBACK_JS = "(function(){" +
+      "var j=window['___jsl'];" +
+      "if(j['c']&&--j['o']<=0){"+
+      "j['c']();" +
+      "delete j['c'];" +
+      "delete j['o'];" +      
+      "}" +
+      "})();";
+
+  public boolean process(JsRequest jsRequest, JsResponseBuilder builder) {
+    JsUri jsUri = jsRequest.getJsUri();
+    if (!jsUri.isNohint()) {
+      builder.addJsCode(JSL_CALLBACK_JS);
+    }
+    return true;
+  }
+
+}

Modified: 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/js/InjectJsInfoVariableProcessor.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/js/InjectJsInfoVariableProcessor.java?rev=1074351&r1=1074350&r2=1074351&view=diff
==============================================================================
--- 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/js/InjectJsInfoVariableProcessor.java
 (original)
+++ 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/js/InjectJsInfoVariableProcessor.java
 Thu Feb 24 23:15:58 2011
@@ -39,7 +39,11 @@ import java.util.List;
 public class InjectJsInfoVariableProcessor implements JsProcessor {
 
   @VisibleForTesting
-  static final String HINT_TEMPLATE = 
"window['___jsl']={'u':'%s','f':[%s]};\n";
+  static final String HINT_TEMPLATE = "(function(){" + 
+  "var j=window['___jsl']=window['___jsl']||{};" +
+  "j['u']='%s';" +
+  "j['f']=[%s];" +
+  "})();";
 
   private final JsUriManager jsUriManager;
 

Modified: 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/js/JavascriptModule.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/js/JavascriptModule.java?rev=1074351&r1=1074350&r2=1074351&view=diff
==============================================================================
--- 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/js/JavascriptModule.java
 (original)
+++ 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/js/JavascriptModule.java
 Thu Feb 24 23:15:58 2011
@@ -41,9 +41,11 @@ public class JavascriptModule extends Ab
       InjectJsInfoVariableProcessor injectJsInfoVariableProcessor,
       JsLoadProcessor jsLoaderGeneratorProcessor, IfModifiedSinceProcessor 
ifModifiedSinceProcessor,
       GetJsContentProcessor getJsContentProcessor,
-      AddOnloadFunctionProcessor addOnloadFunctionProcessor) {
+      AddOnloadFunctionProcessor addOnloadFunctionProcessor,
+      AddJsLoadCallbackProcessor addJsLoadCallbackProcessor) {
     return ImmutableList.of(injectJsInfoVariableProcessor, 
jsLoaderGeneratorProcessor,
-        ifModifiedSinceProcessor, getJsContentProcessor, 
addOnloadFunctionProcessor);
+        ifModifiedSinceProcessor, getJsContentProcessor, 
addOnloadFunctionProcessor,
+        addJsLoadCallbackProcessor);
   }
   
 }

Added: 
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/js/AddJsLoadCallbackProcessorTest.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/js/AddJsLoadCallbackProcessorTest.java?rev=1074351&view=auto
==============================================================================
--- 
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/js/AddJsLoadCallbackProcessorTest.java
 (added)
+++ 
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/js/AddJsLoadCallbackProcessorTest.java
 Thu Feb 24 23:15:58 2011
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package org.apache.shindig.gadgets.js;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import org.apache.shindig.gadgets.uri.JsUriManager.JsUri;
+import org.easymock.EasyMock;
+import org.easymock.IMocksControl;
+import org.junit.Before;
+import org.junit.Test;
+
+public class AddJsLoadCallbackProcessorTest {
+  
+  private IMocksControl control;
+  private JsUri jsUri;
+  private JsRequest request;
+  private JsResponseBuilder response;
+  private AddJsLoadCallbackProcessor processor;  
+  
+  @Before
+  public void setUp() {
+    control = EasyMock.createControl();
+    jsUri = control.createMock(JsUri.class);
+    request = control.createMock(JsRequest.class);
+    response = new JsResponseBuilder();
+    processor = new AddJsLoadCallbackProcessor();
+    EasyMock.expect(request.getJsUri()).andReturn(jsUri);
+  }
+
+  @Test
+  public void testWithHint() throws Exception {
+    EasyMock.expect(jsUri.isNohint()).andReturn(false);
+    control.replay();
+    assertTrue(processor.process(request, response));
+    assertEquals(AddJsLoadCallbackProcessor.JSL_CALLBACK_JS,
+        response.getJsCode().toString());
+    control.verify();
+  }
+
+  @Test
+  public void testWithoutHint() throws Exception {
+    EasyMock.expect(jsUri.isNohint()).andReturn(true);
+    control.replay();
+    assertTrue(processor.process(request, response));
+    assertEquals("", response.getJsCode().toString());
+    control.verify();
+  }
+}


Reply via email to