You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by bo...@apache.org on 2008/04/27 16:41:14 UTC

svn commit: r651957 - in /myfaces/tobago/trunk: core/src/main/java/org/apache/myfaces/tobago/context/ core/src/main/java/org/apache/myfaces/tobago/renderkit/ core/src/main/java/org/apache/myfaces/tobago/renderkit/html/ core/src/main/java/org/apache/myf...

Author: bommel
Date: Sun Apr 27 07:41:08 2008
New Revision: 651957

URL: http://svn.apache.org/viewvc?rev=651957&view=rev
Log:
apply some minor optimizations

Modified:
    myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/context/ResourceManagerImpl.java
    myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/renderkit/HtmlUtils.java
    myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/renderkit/html/HtmlStyleMap.java
    myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/renderkit/html/StyleClasses.java
    myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/webapp/TobagoResponseWriter.java
    myfaces/tobago/trunk/theme/scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/CalendarRenderer.java
    myfaces/tobago/trunk/theme/scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/InRenderer.java
    myfaces/tobago/trunk/theme/scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/PopupRenderer.java
    myfaces/tobago/trunk/theme/scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeListboxRenderer.java
    myfaces/tobago/trunk/theme/scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeNodeRenderer.java
    myfaces/tobago/trunk/theme/scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeRenderer.java
    myfaces/tobago/trunk/theme/standard/src/main/java/org/apache/myfaces/tobago/renderkit/html/util/HtmlRendererUtil.java

Modified: myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/context/ResourceManagerImpl.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/context/ResourceManagerImpl.java?rev=651957&r1=651956&r2=651957&view=diff
==============================================================================
--- myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/context/ResourceManagerImpl.java (original)
+++ myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/context/ResourceManagerImpl.java Sun Apr 27 07:41:08 2008
@@ -292,7 +292,7 @@
       String language, Theme theme, String browser,
       String subDir, String name, String localeSuffix, String extension,
       String key) {
-    StringBuilder searchtext = new StringBuilder();
+    StringBuilder searchtext = new StringBuilder(64);
 
     searchtext.append('/');
     searchtext.append(project);
@@ -320,7 +320,7 @@
 
   private String makePath(
       String name, String localeSuffix, String extension, String key) {
-    StringBuilder searchtext = new StringBuilder();
+    StringBuilder searchtext = new StringBuilder(64);
 
     searchtext.append('/');
     searchtext.append(name);

Modified: myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/renderkit/HtmlUtils.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/renderkit/HtmlUtils.java?rev=651957&r1=651956&r2=651957&view=diff
==============================================================================
--- myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/renderkit/HtmlUtils.java (original)
+++ myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/renderkit/HtmlUtils.java Sun Apr 27 07:41:08 2008
@@ -51,7 +51,6 @@
   public static String generateOnchange(UIInput component,
       FacesContext facesContext) {
 
-    StringBuilder buffer = new StringBuilder();
     /*Validator[] validators = component.getValidators();
     for (int i = 0; i < validators.length; i++) {
       if (validators[i] instanceof LongRangeValidator) {
@@ -70,18 +69,10 @@
     } */
 
     Object onchange = component.getAttributes().get(ATTR_ONCHANGE);
-    if (onchange != null) { // append the onchange attribute
-      if (buffer.length() > 0) {
-        buffer.append(" && ");
-      }
-      buffer.append(onchange);
-    }
-
-    if (buffer.length() > 0) { // has content ?
-      return buffer.toString();
-    } else {
-      return null;
+    if (onchange != null) {
+      return onchange.toString();
     }
+    return null;
   }
 
 }

Modified: myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/renderkit/html/HtmlStyleMap.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/renderkit/html/HtmlStyleMap.java?rev=651957&r1=651956&r2=651957&view=diff
==============================================================================
--- myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/renderkit/html/HtmlStyleMap.java (original)
+++ myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/renderkit/html/HtmlStyleMap.java Sun Apr 27 07:41:08 2008
@@ -58,6 +58,9 @@
   }
 
   public String toString() {
+    if (entrySet().isEmpty()) {
+      return null;
+    }
     StringBuilder buf = new StringBuilder();
     for(Map.Entry<String, Object> style :entrySet()) {
       buf.append(style.getKey());

Modified: myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/renderkit/html/StyleClasses.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/renderkit/html/StyleClasses.java?rev=651957&r1=651956&r2=651957&view=diff
==============================================================================
--- myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/renderkit/html/StyleClasses.java (original)
+++ myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/renderkit/html/StyleClasses.java Sun Apr 27 07:41:08 2008
@@ -100,8 +100,7 @@
   }
 
   private String nameOfClass(String renderer, String sub) {
-    StringBuilder builder = new StringBuilder();
-    builder.append(PREFIX);
+    StringBuilder builder = new StringBuilder(PREFIX);
     builder.append(renderer);
     builder.append(SEPERATOR);
     builder.append(sub);
@@ -125,8 +124,7 @@
   }
 
   private String nameOfMarkupClass(String renderer, String sub, String markup) {
-    StringBuilder builder = new StringBuilder();
-    builder.append(PREFIX);
+    StringBuilder builder = new StringBuilder(PREFIX);
     builder.append(renderer);
     if (sub != null) {
       builder.append(SEPERATOR);
@@ -165,8 +163,7 @@
   }
 
   private String nameOfAspectClass(String renderer, Aspect aspect) {
-    StringBuilder builder = new StringBuilder();
-    builder.append(PREFIX);
+    StringBuilder builder = new StringBuilder(PREFIX);
     builder.append(renderer);
     builder.append(aspect);
     return builder.toString();
@@ -182,8 +179,7 @@
   }
 
   private String nameOfAspectClass(String renderer, String sub, Aspect aspect) {
-    StringBuilder builder = new StringBuilder();
-    builder.append(PREFIX);
+    StringBuilder builder = new StringBuilder(PREFIX);
     builder.append(renderer);
     builder.append(SEPERATOR);
     builder.append(sub);

Modified: myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/webapp/TobagoResponseWriter.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/webapp/TobagoResponseWriter.java?rev=651957&r1=651956&r2=651957&view=diff
==============================================================================
--- myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/webapp/TobagoResponseWriter.java (original)
+++ myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/webapp/TobagoResponseWriter.java Sun Apr 27 07:41:08 2008
@@ -196,8 +196,7 @@
       characterEncoding = "UTF-8";
     }
 
-    StringBuilder builder = new StringBuilder();
-    builder.append(contentType);
+    StringBuilder builder = new StringBuilder(contentType);
     builder.append("; charset=");
     builder.append(characterEncoding);
     return builder.toString();

Modified: myfaces/tobago/trunk/theme/scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/CalendarRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/theme/scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/CalendarRenderer.java?rev=651957&r1=651956&r2=651957&view=diff
==============================================================================
--- myfaces/tobago/trunk/theme/scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/CalendarRenderer.java (original)
+++ myfaces/tobago/trunk/theme/scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/CalendarRenderer.java Sun Apr 27 07:41:08 2008
@@ -261,7 +261,7 @@
 
   private String getMonthNames(Locale locale) {
     SimpleDateFormat dateFormat = new SimpleDateFormat("MMMMM", locale);
-    StringBuilder buffer = new StringBuilder();
+    StringBuilder buffer = new StringBuilder(64);
     Calendar calendar = Calendar.getInstance();
     calendar.set(2000, 0, 1);
     for (int month = 0; month < 12; ++month) {

Modified: myfaces/tobago/trunk/theme/scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/InRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/theme/scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/InRenderer.java?rev=651957&r1=651956&r2=651957&view=diff
==============================================================================
--- myfaces/tobago/trunk/theme/scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/InRenderer.java (original)
+++ myfaces/tobago/trunk/theme/scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/InRenderer.java Sun Apr 27 07:41:08 2008
@@ -218,7 +218,7 @@
     List suggesteds
         = (List) mb.invoke(context, new Object[]{(String) input.getSubmittedValue()});
 
-    StringBuilder sb = new StringBuilder();
+    StringBuilder sb = new StringBuilder(64);
     sb.append("return  {items: [");
 
     int suggestedCount = 0;

Modified: myfaces/tobago/trunk/theme/scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/PopupRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/theme/scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/PopupRenderer.java?rev=651957&r1=651956&r2=651957&view=diff
==============================================================================
--- myfaces/tobago/trunk/theme/scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/PopupRenderer.java (original)
+++ myfaces/tobago/trunk/theme/scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/PopupRenderer.java Sun Apr 27 07:41:08 2008
@@ -82,7 +82,7 @@
       zIndex = 0;
     }
 
-    final StringBuilder contentStyle = new StringBuilder();
+    final StringBuilder contentStyle = new StringBuilder(32);
     if (component.getWidth() != null) {
       contentStyle.append("width: ");
       contentStyle.append(component.getWidth());
@@ -122,8 +122,8 @@
       writer.writeClassAttribute("tobago-popup-iframe tobago-popup-none");
       writer.writeStyleAttribute("z-index: " + (zIndex + 2) + ";");
       UIPage page = (UIPage) ComponentUtil.findPage(facesContext);
-      final StringBuilder frameSize = new StringBuilder();
       if (component.isModal()) {
+        final StringBuilder frameSize = new StringBuilder(32);
         // full client area
         frameSize.append("width: ");
         frameSize.append(page.getWidth());
@@ -131,10 +131,11 @@
         frameSize.append("height: ");
         frameSize.append(page.getHeight());
         frameSize.append("; ");
+        writer.writeAttribute(HtmlAttributes.STYLE, frameSize.toString(), false);
       } else {
-        frameSize.append(contentStyle); // size of the popup
+        writer.writeAttribute(HtmlAttributes.STYLE, contentStyle.toString(), false); // size of the popup
       }
-      writer.writeAttribute(HtmlAttributes.STYLE, frameSize.toString(), false);
+
       writer.writeAttribute(HtmlAttributes.SRC, ResourceManagerUtil.getBlankPage(facesContext), false);
       writer.writeAttribute(HtmlAttributes.FRAMEBORDER, "0", false);
       writer.endElement(HtmlConstants.IFRAME);

Modified: myfaces/tobago/trunk/theme/scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeListboxRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/theme/scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeListboxRenderer.java?rev=651957&r1=651956&r2=651957&view=diff
==============================================================================
--- myfaces/tobago/trunk/theme/scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeListboxRenderer.java (original)
+++ myfaces/tobago/trunk/theme/scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeListboxRenderer.java Sun Apr 27 07:41:08 2008
@@ -118,7 +118,7 @@
   private String  createJavascript(FacesContext facesContext, String clientId,
                                     UITreeListbox tree, UITreeOldNode root) throws IOException {
 
-    StringBuilder sb = new StringBuilder();
+    StringBuilder sb = new StringBuilder(256);
     sb.append("{\n");
 
     sb.append("  var treeResourcesHelp = new Object();\n");

Modified: myfaces/tobago/trunk/theme/scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeNodeRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/theme/scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeNodeRenderer.java?rev=651957&r1=651956&r2=651957&view=diff
==============================================================================
--- myfaces/tobago/trunk/theme/scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeNodeRenderer.java (original)
+++ myfaces/tobago/trunk/theme/scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeNodeRenderer.java Sun Apr 27 07:41:08 2008
@@ -204,15 +204,15 @@
       writer.writeIdAttribute(id + "-cont");
       writer.writeStyleAttribute(contentStyle);
     }
-
-    String label = node.getLabel();
-    int level = modelNode.getLevel();
-    StringBuilder builder = new StringBuilder();
-    for (int i = 0; i < level; i++) {
-      builder.append("    ");
-
+    if (LOG.isDebugEnabled())  {
+      String label = node.getLabel();
+      int level = modelNode.getLevel();
+      StringBuilder builder = new StringBuilder();
+      for (int i = 0; i < level; i++) {
+        builder.append("    ");
+      }
+      LOG.debug(builder + "<div name=" + label + ">");
     }
-    LOG.debug(builder + "<div name=" + label + ">");
   }
 
   private void encodeExpandedHidden(TobagoResponseWriter writer, AbstractUITreeNode node, String clientId,

Modified: myfaces/tobago/trunk/theme/scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/theme/scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeRenderer.java?rev=651957&r1=651956&r2=651957&view=diff
==============================================================================
--- myfaces/tobago/trunk/theme/scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeRenderer.java (original)
+++ myfaces/tobago/trunk/theme/scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeRenderer.java Sun Apr 27 07:41:08 2008
@@ -149,7 +149,7 @@
   }
 
   private String createJavascript(FacesContext facesContext) throws IOException {
-    StringBuilder sb = new StringBuilder();
+    StringBuilder sb = new StringBuilder(128);
 
     sb.append("{\n");
 

Modified: myfaces/tobago/trunk/theme/standard/src/main/java/org/apache/myfaces/tobago/renderkit/html/util/HtmlRendererUtil.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/theme/standard/src/main/java/org/apache/myfaces/tobago/renderkit/html/util/HtmlRendererUtil.java?rev=651957&r1=651956&r2=651957&view=diff
==============================================================================
--- myfaces/tobago/trunk/theme/standard/src/main/java/org/apache/myfaces/tobago/renderkit/html/util/HtmlRendererUtil.java (original)
+++ myfaces/tobago/trunk/theme/standard/src/main/java/org/apache/myfaces/tobago/renderkit/html/util/HtmlRendererUtil.java Sun Apr 27 07:41:08 2008
@@ -198,8 +198,7 @@
 
   public static String createAcceleratorKeyJsStatement(
       String func, char key, String modifier) {
-    StringBuilder buffer = new StringBuilder();
-    buffer.append("new Tobago.AcceleratorKey(function() {");
+    StringBuilder buffer = new StringBuilder("new Tobago.AcceleratorKey(function() {");
     buffer.append(func);
     if (!func.endsWith(";")) {
       buffer.append(';');
@@ -447,17 +446,20 @@
 
   public static void addImageSources(FacesContext facesContext, TobagoResponseWriter writer, String src, String id)
       throws IOException {
-    StringBuilder buffer = new StringBuilder();
-    buffer.append("new Tobago.Image('");
-    buffer.append(id);
-    buffer.append("','");
-    buffer.append(ResourceManagerUtil.getImageWithPath(facesContext, src, false));
-    buffer.append("','");
-    buffer.append(ResourceManagerUtil.getImageWithPath(facesContext, createSrc(src, "Disabled"), true));
-    buffer.append("','");
-    buffer.append(ResourceManagerUtil.getImageWithPath(facesContext, createSrc(src, "Hover"), true));
-    buffer.append("');");
-    writer.writeJavascript(buffer.toString());
+    writer.startJavascript();
+    writer.write("new Tobago.Image('");
+    writer.write(id);
+    writer.write("','");
+    String img = ResourceManagerUtil.getImageWithPath(facesContext, src, false);
+    writer.write(img!=null?img:"");
+    writer.write("','");
+    String disabled = ResourceManagerUtil.getImageWithPath(facesContext, createSrc(src, "Disabled"), true);
+    writer.write(disabled!=null?disabled:"");
+    writer.write("','");
+    String hover = ResourceManagerUtil.getImageWithPath(facesContext, createSrc(src, "Hover"), true);
+    writer.write(hover!=null?hover:"");
+    writer.write("');");
+    writer.endJavascript();
   }
 
   public static String createSrc(String src, String ext) {
@@ -523,7 +525,7 @@
       allScripts = ResourceManagerUtil.getScriptsAsJSArray(facesContext, scripts);
     }
 
-    StringBuilder script = new StringBuilder();
+    StringBuilder script = new StringBuilder(128);
     script.append("new Tobago.ScriptLoader(\n    ");
     script.append(allScripts);
 
@@ -552,7 +554,7 @@
       FacesContext facesContext, String[] styles) throws IOException {
     TobagoResponseWriter writer = HtmlRendererUtil.getTobagoResponseWriter(facesContext);
 
-    StringBuilder builder = new StringBuilder();
+    StringBuilder builder = new StringBuilder(64);
     builder.append("Tobago.ensureStyleFiles(\n    ");
     builder.append(ResourceManagerUtil.getStylesAsJSArray(facesContext, styles));
     builder.append(");");
@@ -752,7 +754,8 @@
       writer.writeAttribute("dndData", String.valueOf(objDndData), false);
     }
     if (addStyle && (null != objDndType || null != objDndData)) {
-      ComponentUtil.setStyleClasses(component, "dojoDndItem");
+      StyleClasses styles = StyleClasses.ensureStyleClasses(component);
+      styles.addFullQualifiedClass("dojoDndItem");
     }
   }
 
@@ -841,28 +844,41 @@
                                       FacesContext facesContext, TobagoResponseWriter writer) throws IOException {
     if (facetEntry.getValue() instanceof UICommand
         && ((UICommand) facetEntry.getValue()).getRenderedPartially().length > 0) {
-      String script =
-          "var element = Tobago.element(\"" + clientId + "\");\n"
-              + "if (element) {\n"
-              + "   Tobago.addEventListener(element, \"" + facetEntry.getKey()
-              + "\", function(){Tobago.reloadComponent('"
-              + HtmlRendererUtil.getComponentIds(facesContext, facetEntry.getValue(),
-              ((UICommand) facetEntry.getValue()).getRenderedPartially()) + "','"
-              + facetEntry.getValue().getClientId(facesContext) + "', {})});\n"
-              + "}";
-      writer.writeJavascript(script);
+      writer.startJavascript();
+      writer.write("var element = Tobago.element(\"");
+      writer.write(clientId);
+      writer.write("\");\n");
+      writer.write("if (element) {\n");
+      writer.write("   Tobago.addEventListener(element, \"");
+      writer.write(facetEntry.getKey());
+      writer.write("\", function(){Tobago.reloadComponent('");
+      writer.write(HtmlRendererUtil.getComponentIds(facesContext, facetEntry.getValue(),
+              ((UICommand) facetEntry.getValue()).getRenderedPartially()));
+      writer.write("','");
+      writer.write(facetEntry.getValue().getClientId(facesContext)); 
+      writer.write("', {})});\n");
+      writer.write("}");
+      writer.endJavascript();
     } else {
       UIComponent facetComponent = facetEntry.getValue();
+
+      writer.startJavascript();
+      writer.write("var element = Tobago.element(\"");
+      writer.write(clientId + "\");\n");
+      writer.write("if (element) {\n");
+      writer.write("   Tobago.addEventListener(element, \"");
+      writer.write(facetEntry.getKey());
+      writer.write("\", function(){");
       String facetAction = (String) facetComponent.getAttributes().get(ATTR_ONCLICK);
-      if (facetAction == null) {
-        facetAction = "Tobago.submitAction('" + facetComponent.getClientId(facesContext) + "')";
+      if (facetAction != null) {
+        writer.write(facetAction);
+      } else {
+        writer.write("Tobago.submitAction('");
+        writer.write(facetComponent.getClientId(facesContext));
+        writer.write("')");
       }
-      String script =
-          "var element = Tobago.element(\"" + clientId + "\");\n"
-              + "if (element) {\n"
-              + "   Tobago.addEventListener(element, \"" + facetEntry.getKey() + "\", function(){"
-              + facetAction + "});\n}";
-      writer.writeJavascript(script);
+      writer.write("});\n}");
+      writer.endJavascript();
     }
   }
 }