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();
+ }
+}