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 9645d2a69 TAP5-2810: ES modules for Bootstrap JS
9645d2a69 is described below
commit 9645d2a69b4a12046eb6cc923999c28b1b0783a5
Author: Thiago H. de Paula Figueiredo <[email protected]>
AuthorDate: Fri Jul 11 15:03:15 2025 -0300
TAP5-2810: ES modules for Bootstrap JS
---
5_10_RELEASE_NOTES.md | 20 ++++++--
.../apache/tapestry5/modules/JavaScriptModule.java | 55 ++++++++++++++++++++++
.../integration/app1/services/AppModule.java | 1 -
3 files changed, 70 insertions(+), 6 deletions(-)
diff --git a/5_10_RELEASE_NOTES.md b/5_10_RELEASE_NOTES.md
index d62d92163..05f469737 100644
--- a/5_10_RELEASE_NOTES.md
+++ b/5_10_RELEASE_NOTES.md
@@ -22,11 +22,21 @@ Scratch pad for changes destined for the 5.10.0 release
notes page.
# Non-backward-compatible changes
-When using Require.js and AMD modules, from Tapestry 5.10.0 on,
-the previously returned objects, functions or values are now
-the `default` property of the object received from `require()`.
-This is a consequence we couldn't avoid from the CoffeeScript
-to JavaScript to TypeScript conversion.
+* When using Require.js and AMD modules, from Tapestry 5.10.0 on,
+ the previously returned objects, functions or values are now
+ the `default` property of the object received from `require()`.
+ This is a consequence we couldn't avoid from the CoffeeScript
+ to JavaScript to TypeScript conversion.
+
+
+# Notes about Require.js disabled mode
+* When using Bootstrap 3, the `t5/bootstrap/*` modules had automatic dependency
+ management (for example, if you `bootstrap/tooltip`, `bootstrap/transition`
+ would automatically be included too through Require.js). This doesn't happen
+ when Require.js is disabled. So, for example, when importing
`bootstrap/tooltip`,
+ you should import `bootstrap/trasition` first. Notice Bootstrap 3 JavaScript
+ files don't have any module management code on it (Require.js nor ES modules)
+
# Overall notes
diff --git
a/tapestry-core/src/main/java/org/apache/tapestry5/modules/JavaScriptModule.java
b/tapestry-core/src/main/java/org/apache/tapestry5/modules/JavaScriptModule.java
index 81dfe7dff..7c537d7ef 100644
---
a/tapestry-core/src/main/java/org/apache/tapestry5/modules/JavaScriptModule.java
+++
b/tapestry-core/src/main/java/org/apache/tapestry5/modules/JavaScriptModule.java
@@ -14,6 +14,7 @@ package org.apache.tapestry5.modules;
import java.util.Locale;
+import org.apache.tapestry5.Asset;
import org.apache.tapestry5.BooleanHook;
import org.apache.tapestry5.MarkupWriter;
import org.apache.tapestry5.SymbolConstants;
@@ -48,8 +49,10 @@ import org.apache.tapestry5.ioc.annotations.Primary;
import org.apache.tapestry5.ioc.annotations.Symbol;
import org.apache.tapestry5.ioc.services.FactoryDefaults;
import org.apache.tapestry5.ioc.services.SymbolProvider;
+import org.apache.tapestry5.ioc.services.SymbolSource;
import org.apache.tapestry5.ioc.util.IdAllocator;
import org.apache.tapestry5.json.JSONObject;
+import org.apache.tapestry5.services.AssetSource;
import org.apache.tapestry5.services.ComponentOverride;
import org.apache.tapestry5.services.Core;
import org.apache.tapestry5.services.Environment;
@@ -542,6 +545,58 @@ public class JavaScriptModule
}
+ @Contribute(EsModuleManager.class)
+ public static void setupBaseEsModules(
+ OrderedConfiguration<EsModuleManagerContribution> configuration,
+ @Symbol(SymbolConstants.BOOTSTRAP_ROOT) String bootstrapRoot,
+ Compatibility compatibility,
+ AssetSource assetSource)
+ {
+
+
+ if (compatibility.enabled(Trait.BOOTSTRAP_3))
+ {
+ final String[] modules = new String[]{"affix", "alert", "button",
"carousel", "collapse", "dropdown", "modal",
+ "scrollspy", "tab", "tooltip", "transition", "popover"};
+ addEsBootstrap3Modules(configuration, modules, bootstrapRoot,
assetSource);
+ }
+ if (compatibility.enabled(Trait.BOOTSTRAP_4))
+ {
+ final String[] modules = new String[]{"alert", "button",
"carousel", "collapse", "dropdown", "modal",
+ "scrollspy", "tab", "tooltip", "bootstrap-util", "popper"};
+
+ addEsBootstrap3Modules(configuration, modules, bootstrapRoot,
assetSource);
+ }
+
+ // Just the minimum to have alerts and AJAX validation working when
Bootstrap
+ // is completely disabled
+ if (!compatibility.enabled(Trait.BOOTSTRAP_3) &&
!compatibility.enabled(Trait.BOOTSTRAP_4))
+ {
+ final String[] modules = new String[]{"transition", "collapse",
"alert", "dropdown"};
+ addEsBootstrap3Modules(configuration, modules, bootstrapRoot,
assetSource);
+ }
+
+ }
+
+ private static void addEsBootstrap3Modules(
+ OrderedConfiguration<EsModuleManagerContribution> configuration,
+ String[] modules,
+ String bootstrapRoot,
+ AssetSource assetSource)
+ {
+ for (String module : modules)
+ {
+ final String moduleId = "bootstrap/" + module;
+ final Resource resource =
assetSource.getClasspathAsset(bootstrapRoot + "/" + module + ".js")
+ .getResource();
+ if (resource.exists())
+ {
+ final String url = resource.toURL().toString();
+ configuration.add(moduleId, EsModuleManagerContribution.base(
+ c -> EsModuleConfigurationCallback.setImport(c,
moduleId, url)));
+ }
+ }
+ }
/**
* Contributes 'ConfigureHTMLElement', which writes the attributes into
the HTML tag to describe locale, etc.
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 a506478a9..d067f8cac 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
@@ -186,7 +186,6 @@ public class AppModule
// This is the emphasis of testing at this point.
configuration.add(SymbolConstants.JAVASCRIPT_INFRASTRUCTURE_PROVIDER,
"jquery");
- configuration.add(SymbolConstants.REQUIRE_JS_ENABLED, "false");
configuration.add(D3_URL_SYMBOL,
"cdnjs.cloudflare.com/ajax/libs/d3/3.0.0/d3.js");
configuration.add(SymbolConstants.PRELOADER_MODE,
PreloaderMode.ALWAYS);