This is an automated email from the ASF dual-hosted git repository.

adelbene pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/wicket.git


The following commit(s) were added to refs/heads/master by this push:
     new 3e211ad8e9 WICKET-6991 using a separate StringBuilder for 
OnLoadHeaderItemS
3e211ad8e9 is described below

commit 3e211ad8e904fc1b38f8982d480d9b0b60153304
Author: Andrea Del Bene <[email protected]>
AuthorDate: Wed Jun 29 16:07:18 2022 +0200

    WICKET-6991 using a separate StringBuilder for OnLoadHeaderItemS
---
 .../wicket/markup/head/ResourceAggregator.java     | 32 ++++++++++----------
 .../aggregator/ResourceAggregatorTest.java         | 34 ++++++++++++++++++++++
 2 files changed, 51 insertions(+), 15 deletions(-)

diff --git 
a/wicket-core/src/main/java/org/apache/wicket/markup/head/ResourceAggregator.java
 
b/wicket-core/src/main/java/org/apache/wicket/markup/head/ResourceAggregator.java
index 963a5d829b..614678431b 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/markup/head/ResourceAggregator.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/markup/head/ResourceAggregator.java
@@ -347,43 +347,45 @@ public class ResourceAggregator extends 
DecoratingHeaderResponse
        private void renderCombinedEventScripts()
        {
                // make a rough estimate of the size to which this 
StringBuilder will grow
-               int length = domReadyItemsToBeRendered.size() * 256;
-               StringBuilder combinedScript = new StringBuilder(length);
+               int domReadyLength = domReadyItemsToBeRendered.size() * 256;
+               StringBuilder domReadScript = new StringBuilder(domReadyLength);
                for (HeaderItem curItem : domReadyItemsToBeRendered)
                {
                        if (markItemRendered(curItem))
                        {
-                               combinedScript.append('\n');
+                               domReadScript.append('\n');
                                if (curItem instanceof OnDomReadyHeaderItem)
                                {
-                                       
combinedScript.append(((OnDomReadyHeaderItem)curItem).getJavaScript());
+                                       
domReadScript.append(((OnDomReadyHeaderItem)curItem).getJavaScript());
                                } else if (curItem instanceof OnEventHeaderItem)
                                {
-                                       
combinedScript.append(((OnEventHeaderItem)curItem).getCompleteJavaScript());
+                                       
domReadScript.append(((OnEventHeaderItem)curItem).getCompleteJavaScript());
                                }
-                               combinedScript.append(';');
+                               domReadScript.append(';');
                        }
                }
-               if (combinedScript.length() > 0)
+               if (domReadScript.length() > 0)
                {
-                       
combinedScript.append("\nWicket.Event.publish(Wicket.Event.Topic.AJAX_HANDLERS_BOUND);\n");
-                       
getRealResponse().render(OnDomReadyHeaderItem.forScript(combinedScript));
+                       
domReadScript.append("\nWicket.Event.publish(Wicket.Event.Topic.AJAX_HANDLERS_BOUND);\n");
+                       
getRealResponse().render(OnDomReadyHeaderItem.forScript(domReadScript));
                }
 
-               combinedScript.setLength(0);
+               int onLoadLength = loadItemsToBeRendered.size() * 256;
+        StringBuilder onLoadScript = new StringBuilder(onLoadLength);
+               
                for (OnLoadHeaderItem curItem : loadItemsToBeRendered)
                {
                        if (markItemRendered(curItem))
                        {
-                               combinedScript.append('\n');
-                               combinedScript.append(curItem.getJavaScript());
-                               combinedScript.append(';');
+                           onLoadScript.append('\n');
+                           onLoadScript.append(curItem.getJavaScript());
+                           onLoadScript.append(';');
                        }
                }
-               if (combinedScript.length() > 0)
+               if (onLoadScript.length() > 0)
                {
                        getRealResponse().render(
-                               
OnLoadHeaderItem.forScript(combinedScript.append('\n')));
+                               
OnLoadHeaderItem.forScript(onLoadScript.append('\n')));
                }
        }
 
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/resource/aggregator/ResourceAggregatorTest.java
 
b/wicket-core/src/test/java/org/apache/wicket/resource/aggregator/ResourceAggregatorTest.java
index 5bddd9c778..bc5e762416 100644
--- 
a/wicket-core/src/test/java/org/apache/wicket/resource/aggregator/ResourceAggregatorTest.java
+++ 
b/wicket-core/src/test/java/org/apache/wicket/resource/aggregator/ResourceAggregatorTest.java
@@ -19,6 +19,7 @@ package org.apache.wicket.resource.aggregator;
 import static org.apache.wicket.markup.head.JavaScriptHeaderItem.forReference;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -26,6 +27,8 @@ import java.util.List;
 
 import org.apache.wicket.Application;
 import org.apache.wicket.markup.head.HeaderItem;
+import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
+import org.apache.wicket.markup.head.OnLoadHeaderItem;
 import org.apache.wicket.markup.head.PriorityHeaderItem;
 import org.apache.wicket.markup.head.ResourceAggregator;
 import org.apache.wicket.request.resource.ResourceReference;
@@ -274,4 +277,35 @@ class ResourceAggregatorTest extends WicketTestCase
                aggregator.render(new PriorityHeaderItem(forReference(new 
ResourceReferenceA())));
                assertItems(new PriorityHeaderItem(bundleAB), forReference(new 
ResourceReferenceX()));
        }
+       
+       /**
+        *  Test rendering for onDomReady and onLoad scripts
+        */
+       
+       @Test
+       void testCombinedScripts()
+    {
+        String onLoadScript = ";alert('Hello!');";
+        String onReadyScript = ";alert('Ready!');";
+        
+        aggregator.render(OnDomReadyHeaderItem.forScript(onReadyScript));
+        aggregator.render(OnLoadHeaderItem.forScript(onLoadScript));
+        aggregator.close();
+        
+        List<HeaderItem> items = responseStub.getItems();
+        
+        OnDomReadyHeaderItem onDomReadyItem = (OnDomReadyHeaderItem) 
items.stream()
+            .filter(item -> (item instanceof OnDomReadyHeaderItem))
+            .findFirst().get();
+           
+        String onReadyItemScript = onDomReadyItem.getJavaScript().toString();
+        assertTrue(onReadyItemScript.contains(onReadyScript));
+        
+        OnLoadHeaderItem onLoadItem = (OnLoadHeaderItem) items.stream()
+            .filter(item -> (item instanceof OnLoadHeaderItem))
+            .findFirst().get();
+        
+        String onLoadItemScript = onLoadItem.getJavaScript().toString();
+        assertTrue(onLoadItemScript.contains(onLoadScript));
+    }
 }

Reply via email to