Revision: 6252 Author: [email protected] Date: Tue Sep 29 13:58:28 2009 Log: Add CssResource.ensureInjected().
Patch by: bobv Review by: rjrjr http://code.google.com/p/google-web-toolkit/source/detail?r=6252 Added: /trunk/user/test/com/google/gwt/resources/client/empty.css Modified: /trunk/user/src/com/google/gwt/resources/Resources.gwt.xml /trunk/user/src/com/google/gwt/resources/client/CssResource.java /trunk/user/src/com/google/gwt/resources/rg/CssResourceGenerator.java /trunk/user/test/com/google/gwt/resources/client/CSSResourceTest.java ======================================= --- /trunk/user/src/com/google/gwt/resources/Resources.gwt.xml Wed May 27 06:48:54 2009 +++ /trunk/user/src/com/google/gwt/resources/Resources.gwt.xml Tue Sep 29 13:58:28 2009 @@ -16,6 +16,8 @@ <module> <!-- Pull in the necessary base support, including user.agent detection --> <inherits name="com.google.gwt.core.Core" /> + <!-- Pull in StyleInjector for CssResource --> + <inherits name="com.google.gwt.dom.DOM" /> <!-- Used by ExternalTextResource --> <inherits name="com.google.gwt.http.HTTP" /> ======================================= --- /trunk/user/src/com/google/gwt/resources/client/CssResource.java Thu Aug 20 05:44:21 2009 +++ /trunk/user/src/com/google/gwt/resources/client/CssResource.java Tue Sep 29 13:58:28 2009 @@ -283,6 +283,16 @@ @Target(ElementType.METHOD) public @interface Strict { } + + /** + * Calls + * {...@link com.google.gwt.dom.client.StyleInjector#injectStylesheet(String)} to + * inject the contents of the CssResource into the DOM. Repeated calls to this + * method on an instance of a CssResources will have no effect. + * + * @return <code>true</code> if this method mutated the DOM. + */ + boolean ensureInjected(); /** * Provides the contents of the CssResource. ======================================= --- /trunk/user/src/com/google/gwt/resources/rg/CssResourceGenerator.java Tue Sep 29 13:58:11 2009 +++ /trunk/user/src/com/google/gwt/resources/rg/CssResourceGenerator.java Tue Sep 29 13:58:28 2009 @@ -30,6 +30,7 @@ import com.google.gwt.dev.util.DefaultTextOutput; import com.google.gwt.dev.util.Util; import com.google.gwt.dom.client.Element; +import com.google.gwt.dom.client.StyleInjector; import com.google.gwt.i18n.client.LocaleInfo; import com.google.gwt.resources.client.CssResource; import com.google.gwt.resources.client.CssResource.ClassName; @@ -404,6 +405,10 @@ throw new UnableToCompleteException(); } } + + // Methods defined by CssResource interface + writeEnsureInjected(sw); + writeGetName(method, sw); sw.println("public String getText() {"); sw.indent(); @@ -416,12 +421,6 @@ sw.outdent(); sw.println("}"); - sw.println("public String getName() {"); - sw.indent(); - sw.println("return \"" + method.getName() + "\";"); - sw.outdent(); - sw.println("}"); - /* * getOverridableMethods is used to handle CssResources extending * non-CssResource types. See the discussion in computeReplacementsForType. @@ -911,6 +910,28 @@ sw.outdent(); sw.println("}"); } + + private void writeEnsureInjected(SourceWriter sw) { + sw.println("private boolean injected;"); + sw.println("public boolean ensureInjected() {"); + sw.indent(); + sw.println("if (!injected) {"); + sw.indentln("injected = true;"); + sw.indentln(StyleInjector.class.getName() + ".injectStylesheet(getText());"); + sw.indentln("return true;"); + sw.println("}"); + sw.println("return false;"); + sw.outdent(); + sw.println("}"); + } + + private void writeGetName(JMethod method, SourceWriter sw) { + sw.println("public String getName() {"); + sw.indent(); + sw.println("return \"" + method.getName() + "\";"); + sw.outdent(); + sw.println("}"); + } /** * Write all of the user-defined methods in the CssResource subtype. @@ -927,7 +948,8 @@ for (JMethod toImplement : methods) { String name = toImplement.getName(); - if ("getName".equals(name) || "getText".equals(name)) { + if ("getName".equals(name) || "getText".equals(name) + || "ensureInjected".equals(name)) { continue; } ======================================= --- /trunk/user/test/com/google/gwt/resources/client/CSSResourceTest.java Mon Jul 6 08:09:11 2009 +++ /trunk/user/test/com/google/gwt/resources/client/CSSResourceTest.java Tue Sep 29 13:58:28 2009 @@ -135,6 +135,10 @@ @Strict HasDescendants descendants(); + // Make sure an empty, no-op CssResource works + @Strict + CssResource empty(); + @Source("16x16.png") ImageResource spriteMethod(); } @@ -291,6 +295,17 @@ assertFalse("10px".equals(defines.overrideIntClass())); assertFalse("10".equals(defines.overrideIntClass())); } + + public void testEnsureInjected() { + Resources r = GWT.create(Resources.class); + assertTrue(r.empty().ensureInjected()); + + r = GWT.create(Resources.class); + assertFalse(r.empty().ensureInjected()); + + r = GWT.create(ChildResources.class); + assertTrue(r.empty().ensureInjected()); + } public void testMultipleBundles() { Resources r1 = GWT.create(Resources.class); --~--~---------~--~----~------------~-------~--~----~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~----------~----~----~----~------~----~------~--~---
