This is an automated email from the ASF dual-hosted git repository.
thiagohp pushed a commit to branch feature/requirejs-less
in repository https://gitbox.apache.org/repos/asf/tapestry-5.git
The following commit(s) were added to refs/heads/feature/requirejs-less by this
push:
new 95b0b5a1c TAP5-2810: fixing ES modules and pageinit relationship
95b0b5a1c is described below
commit 95b0b5a1cb9c2ea54d439744397b58fd08578d44
Author: Thiago H. de Paula Figueiredo <[email protected]>
AuthorDate: Sat Jul 26 19:10:56 2025 -0300
TAP5-2810: fixing ES modules and pageinit relationship
---
.../internal/services/EsModuleInitsManager.java | 39 ++++++++++++++++++++--
.../services/PartialMarkupDocumentLinker.java | 12 +++++--
.../services/ajax/EsModuleInitializationImpl.java | 10 +++---
.../services/javascript/EsModuleManagerImpl.java | 20 +++++------
.../src/main/typescript/src/t5/core/pageinit.ts | 13 ++++++--
.../integration/app1/pages/EsModuleDemo.java | 2 +-
.../integration/app1/services/AppModule.java | 2 +-
.../javascript/EsModuleManagerImplTest.java | 39 ++++++++++++----------
.../src/test/resources/META-INF/assets/zonedemo.js | 22 ++++++++++--
9 files changed, 117 insertions(+), 42 deletions(-)
diff --git
a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/EsModuleInitsManager.java
b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/EsModuleInitsManager.java
index e3fc767fe..04f3a2a67 100644
---
a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/EsModuleInitsManager.java
+++
b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/EsModuleInitsManager.java
@@ -25,11 +25,14 @@
package org.apache.tapestry5.internal.services;
+import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import java.util.Set;
import org.apache.tapestry5.commons.util.CollectionFactory;
import org.apache.tapestry5.internal.services.ajax.EsModuleInitializationImpl;
+import org.apache.tapestry5.json.JSONArray;
import org.apache.tapestry5.services.javascript.EsModuleInitialization;
public class EsModuleInitsManager
@@ -37,13 +40,13 @@ public class EsModuleInitsManager
private final Set<String> modules = CollectionFactory.newSet();
private final List<EsModuleInitialization> initializations =
CollectionFactory.newList();
-
+
public void add(EsModuleInitialization initialization)
{
assert initialization != null;
// We ignore a module being added again.
- final String moduleName = ((EsModuleInitializationImpl)
initialization).getModuleId();
+ final String moduleName = ((EsModuleInitializationImpl)
initialization).getModuleName();
if (!modules.contains(moduleName))
{
initializations.add(initialization);
@@ -58,4 +61,36 @@ public class EsModuleInitsManager
{
return initializations;
}
+
+ /**
+ * Returns all previously added inits as JSONArray instances.
+ */
+ public List<JSONArray> getInitsAsJsonArrays()
+ {
+
+ List<JSONArray> list;
+ if (!initializations.isEmpty())
+ {
+ list = new ArrayList<>(initializations.size());
+ for (EsModuleInitialization init : initializations)
+ {
+ final EsModuleInitializationImpl initImpl =
(EsModuleInitializationImpl) init;
+ final JSONArray arguments = initImpl.getArguments();
+ if (arguments != null)
+ {
+ list.add(new JSONArray(initImpl.getModuleName(),
arguments));
+ }
+ else
+ {
+ list.add(new JSONArray().put(initImpl.getModuleName()));
+ }
+ }
+ }
+ else
+ {
+ list = Collections.emptyList();
+ }
+ return list;
+ }
+
}
diff --git
a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PartialMarkupDocumentLinker.java
b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PartialMarkupDocumentLinker.java
index 9ccf81629..ae0614459 100644
---
a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PartialMarkupDocumentLinker.java
+++
b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/PartialMarkupDocumentLinker.java
@@ -24,6 +24,7 @@ import
org.apache.tapestry5.services.javascript.InitializationPriority;
import org.apache.tapestry5.services.javascript.ModuleConfigurationCallback;
import org.apache.tapestry5.services.javascript.StylesheetLink;
+import java.util.ArrayList;
import java.util.List;
public class PartialMarkupDocumentLinker implements DocumentLinker
@@ -34,6 +35,8 @@ public class PartialMarkupDocumentLinker implements
DocumentLinker
private final ModuleInitsManager initsManager = new ModuleInitsManager();
+ private final EsModuleInitsManager esModulesinitsManager = new
EsModuleInitsManager();
+
public void addCoreLibrary(String libraryURL)
{
notImplemented("addCoreLibrary");
@@ -84,7 +87,7 @@ public class PartialMarkupDocumentLinker implements
DocumentLinker
@Override
public void addEsModuleInitialization(EsModuleInitialization
initialization)
{
- notImplemented("addEsModuleInitialization");
+ esModulesinitsManager.add(initialization);
}
/**
@@ -106,10 +109,15 @@ public class PartialMarkupDocumentLinker implements
DocumentLinker
}
List<?> inits = initsManager.getSortedInits();
+ final List<?> esModuleInits =
esModulesinitsManager.getInitsAsJsonArrays();
- if (inits.size() > 0)
+ if (inits.size() > 0 || esModuleInits.size() > 0)
{
+ List<Object> allInits = new ArrayList<>(inits.size() +
esModuleInits.size());
+ allInits.addAll(inits);
+ allInits.addAll(esModuleInits);
reply.in(InternalConstants.PARTIAL_KEY).put("inits",
JSONArray.from(inits));
}
+
}
}
diff --git
a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ajax/EsModuleInitializationImpl.java
b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ajax/EsModuleInitializationImpl.java
index eb4e32137..1fd947592 100644
---
a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ajax/EsModuleInitializationImpl.java
+++
b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ajax/EsModuleInitializationImpl.java
@@ -14,6 +14,7 @@ import java.util.Collections;
import java.util.Map;
import org.apache.tapestry5.commons.util.CollectionFactory;
+import org.apache.tapestry5.json.JSONArray;
import org.apache.tapestry5.services.javascript.EsModuleInitialization;
import org.apache.tapestry5.services.javascript.ImportPlacement;
@@ -22,7 +23,7 @@ public class EsModuleInitializationImpl extends
BaseInitialization<EsModuleIniti
private Map<String, String> attributes;
private ImportPlacement placement = ImportPlacement.BODY_BOTTOM;
- private Object[] arguments;
+ private JSONArray arguments;
public EsModuleInitializationImpl(String moduleName)
{
@@ -45,7 +46,7 @@ public class EsModuleInitializationImpl extends
BaseInitialization<EsModuleIniti
return null;
}
- public String getModuleId() {
+ public String getModuleName() {
return moduleName;
}
@@ -66,10 +67,11 @@ public class EsModuleInitializationImpl extends
BaseInitialization<EsModuleIniti
@Override
public void with(Object... arguments)
{
- this.arguments = arguments;
+ assert arguments != null;
+ this.arguments = new JSONArray(arguments);
}
- public Object[] getArguments()
+ public JSONArray getArguments()
{
return arguments;
}
diff --git
a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/javascript/EsModuleManagerImpl.java
b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/javascript/EsModuleManagerImpl.java
index 5cfebf058..6c56cbf52 100644
---
a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/javascript/EsModuleManagerImpl.java
+++
b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/javascript/EsModuleManagerImpl.java
@@ -218,7 +218,7 @@ public class EsModuleManagerImpl implements EsModuleManager
ImportPlacement placement;
EsModuleInitializationImpl init;
String functionName;
- Object[] arguments;
+ JSONArray arguments;
List<EsModuleInitialization> allInits = new
ArrayList<>(coreStackInits.size() + inits.size());
allInits.addAll(coreStackInits);
@@ -228,7 +228,7 @@ public class EsModuleManagerImpl implements EsModuleManager
{
init = (EsModuleInitializationImpl) i;
- final String moduleId = init.getModuleId();
+ final String moduleId = init.getModuleName();
// Making sure the user doesn't shoot their own foot
final String url = cache.get(moduleId);
if (url == null)
@@ -329,26 +329,26 @@ public class EsModuleManagerImpl implements
EsModuleManager
}
- static String convertToJsFunctionParameters(Object[] arguments, boolean
compactJSON)
+ static String convertToJsFunctionParameters(JSONArray arguments, boolean
compactJSON)
{
String result;
- if (arguments == null || arguments.length == 0)
+ if (arguments == null || arguments.size() == 0)
{
result = "";
}
- else if (arguments.length == 1)
+ else if (arguments.size() == 1)
{
- result = convertToJsFunctionParameter(arguments[0], compactJSON);
+ result = convertToJsFunctionParameter(arguments.get(0),
compactJSON);
}
else {
StringBuilder builder = new StringBuilder();
- for (int i = 0; i < arguments.length; i++)
+ for (int i = 0; i < arguments.size(); i++)
{
if (i > 0)
{
builder.append(", ");
}
- builder.append(convertToJsFunctionParameter(arguments[i],
compactJSON));
+ builder.append(convertToJsFunctionParameter(arguments.get(i),
compactJSON));
}
result = builder.toString();
}
@@ -359,9 +359,9 @@ public class EsModuleManagerImpl implements EsModuleManager
{
String result;
- if (object == null)
+ if (object == null || object == JSONObject.NULL)
{
- result = null;
+ result = "null";
}
else if (object instanceof String || object instanceof JSONLiteral)
{
diff --git a/tapestry-core/src/main/typescript/src/t5/core/pageinit.ts
b/tapestry-core/src/main/typescript/src/t5/core/pageinit.ts
index 5100e68bd..197af3680 100644
--- a/tapestry-core/src/main/typescript/src/t5/core/pageinit.ts
+++ b/tapestry-core/src/main/typescript/src/t5/core/pageinit.ts
@@ -35,6 +35,8 @@ const isOpera = Object.prototype.toString.call(window.opera)
=== '[object Opera]
// @ts-ignore
const isIE = !!window.attachEvent && !isOpera;
+const requireJsEnabled = "true" ==
document.querySelector("body")?.dataset['requireJsEnabled'];
+
const rebuildURL = function(path: string) {
if (path.match(/^https?:/)) { return path; }
@@ -160,8 +162,13 @@ function loadLibraries(libraries: string[], callback: ()
=> any) {
// @ts-ignore
const reducer = (callback, library) => (function() {
console.debug(`Loading library ${library}`);
- // @ts-ignore
- return require([library], callback);
+ if (requireJsEnabled) {
+ // @ts-ignore
+ return require([library], callback);
+ }
+ else {
+ return import(library).then(callback);
+ }
});
const finalCallback = _.reduceRight(libraries, reducer, callback);
@@ -250,7 +257,7 @@ export default exports_ =
_.extend(loadLibrariesAndInitialize, {
// second, which helps ensure that other initializions on the page are in
place.
//
// * fieldId - element id of field to focus on
- focus(fieldId: string) {
+ focus: function(fieldId: string) {
const field = dom(fieldId);
if (field) {
diff --git
a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/EsModuleDemo.java
b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/EsModuleDemo.java
index de17500ba..f58e2c674 100644
---
a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/EsModuleDemo.java
+++
b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/EsModuleDemo.java
@@ -69,7 +69,7 @@ public class EsModuleDemo
.with();
javaScriptSupport.importEsModule("parameter-type-default-export")
- .with(null, true, false, Math.PI * Math.E, "string", "jsonLiteral",
+ .with(JSONObject.NULL, true, false, Math.PI * Math.E, "string",
"jsonLiteral",
new JSONObject("key", "value"), new JSONArray(1, "2"));
if (overrideEsModuleImportAgain != null && overrideEsModuleImportAgain)
diff --git
a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/AppModule.java
b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/AppModule.java
index d067f8cac..b5c7017cc 100644
---
a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/AppModule.java
+++
b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/AppModule.java
@@ -187,7 +187,7 @@ public class AppModule
// This is the emphasis of testing at this point.
configuration.add(SymbolConstants.JAVASCRIPT_INFRASTRUCTURE_PROVIDER,
"jquery");
- configuration.add(D3_URL_SYMBOL,
"cdnjs.cloudflare.com/ajax/libs/d3/3.0.0/d3.js");
+ configuration.add(D3_URL_SYMBOL,
"cdnjs.cloudflare.com/ajax/libs/d3/7.9.0/d3.js");
configuration.add(SymbolConstants.PRELOADER_MODE,
PreloaderMode.ALWAYS);
configuration.add(SymbolConstants.OPENAPI_APPLICATION_VERSION,
"1.2.3.4");
configuration.add(SymbolConstants.OPENAPI_BASE_PATH, "/rest/");
diff --git
a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/javascript/EsModuleManagerImplTest.java
b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/javascript/EsModuleManagerImplTest.java
index 0e41bc12e..055dcac92 100644
---
a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/javascript/EsModuleManagerImplTest.java
+++
b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/javascript/EsModuleManagerImplTest.java
@@ -32,42 +32,42 @@ public class EsModuleManagerImplTest
@Test
public void test_null_arguments()
{
- assertEquals(convert(null, true), "");
- assertEquals(convert(null, false), "");
+ assertEquals(convert(JSONObject.NULL, true), "null");
+ assertEquals(convert(JSONObject.NULL, false), "null");
}
@Test
public void test_empty_arguments()
{
- assertEquals(convert(new Object[0], true), "");
- assertEquals(convert(new Object[0], false), "");
+ assertEquals(convert(new JSONArray(), true), "");
+ assertEquals(convert(new JSONArray(), false), "");
}
@Test
public void test_one_argument()
{
- assertEquals(convert(new Object[] {null}, false), null);
+ assertEquals(convert(new JSONArray(JSONObject.NULL), false), "null");
- assertEquals(convert(new Object[] {STRING}, false), quote(STRING));
+ assertEquals(convert(new JSONArray().put(STRING), false),
quote(STRING));
- assertEquals(convert(new Object[] {NUMBER}, false), NUMBER.toString());
- assertEquals(convert(new Object[] {Boolean.TRUE}, false),
Boolean.TRUE.toString());
- assertEquals(convert(new Object[] {Boolean.FALSE}, false),
Boolean.FALSE.toString());
+ assertEquals(convert(new JSONArray(NUMBER), false), NUMBER.toString());
+ assertEquals(convert(new JSONArray(Boolean.TRUE), false),
Boolean.TRUE.toString());
+ assertEquals(convert(new JSONArray(Boolean.FALSE), false),
Boolean.FALSE.toString());
- assertEquals(convert(new Object[] {JSON_LITERAL}, false),
quote(JSON_LITERAL.toString()));
+ assertEquals(convert(new JSONArray(JSON_LITERAL), false),
quote(JSON_LITERAL.toString()));
- assertEquals(convert(new Object[] {JSON_ARRAY}, false),
JSON_ARRAY.toString(false));
- assertEquals(convert(new Object[] {JSON_ARRAY}, true),
JSON_ARRAY.toString(true));
+ assertEquals(convert(new JSONArray(JSON_ARRAY), false),
JSON_ARRAY.toString(false));
+ assertEquals(convert(new JSONArray(JSON_ARRAY), true),
JSON_ARRAY.toString(true));
- assertEquals(convert(new Object[] {JSON_OBJECT}, false),
JSON_OBJECT.toString(false));
- assertEquals(convert(new Object[] {JSON_OBJECT}, true),
JSON_OBJECT.toString(true));
+ assertEquals(convert(new JSONArray(JSON_OBJECT), false),
JSON_OBJECT.toString(false));
+ assertEquals(convert(new JSONArray(JSON_OBJECT), true),
JSON_OBJECT.toString(true));
}
@Test
public void test_multiple_arguments()
{
- Object[] arguments = new Object[] { null, STRING, JSON_LITERAL,
JSON_ARRAY, JSON_OBJECT };
+ JSONArray arguments = new JSONArray(JSONObject.NULL, STRING,
JSON_LITERAL, JSON_ARRAY, JSON_OBJECT);
final String format = "null, '%s', '%s', %s, %s";
assertEquals(convert(arguments, false),
@@ -84,10 +84,15 @@ public class EsModuleManagerImplTest
{
return "'" + string + "'";
}
+
+ private String convert(Object object, boolean compactJSON)
+ {
+ return convert(new JSONArray(object), compactJSON);
+ }
- private String convert(Object[] blah, boolean compactJSON)
+ private String convert(JSONArray array, boolean compactJSON)
{
- return EsModuleManagerImpl.convertToJsFunctionParameters(blah,
compactJSON);
+ return EsModuleManagerImpl.convertToJsFunctionParameters(array,
compactJSON);
}
}
diff --git a/tapestry-core/src/test/resources/META-INF/assets/zonedemo.js
b/tapestry-core/src/test/resources/META-INF/assets/zonedemo.js
index 9ab069ff9..015dfe198 100644
--- a/tapestry-core/src/test/resources/META-INF/assets/zonedemo.js
+++ b/tapestry-core/src/test/resources/META-INF/assets/zonedemo.js
@@ -3,5 +3,23 @@
* DS102: Remove unnecessary code created because of implicit returns
* Full docs:
https://github.com/decaffeinate/decaffeinate/blob/main/docs/suggestions.md
*/
-require(["t5/core/dom", "t5/core/events"],
- (dom, events) => dom.default.onDocument(events.default.zone.didUpdate, () =>
(dom.default("zone-update-message")).update("Zone updated.")));
+
+function execute(dom, events) {
+ dom.default.onDocument(events.default.zone.didUpdate, function() {
+ dom.default("zone-update-message").update("Zone updated.");
+ });
+}
+
+if (typeof require !== 'undefined') {
+ require(["t5/core/dom", "t5/core/events"], function(dom, events) {
+ execute(dom, events);
+ });
+
+}
+else {
+ import("t5/core/dom").then((dom) => {
+ import("t5/core/events").then((events) => {
+ execute(dom, events);
+ });
+ });
+}
\ No newline at end of file