diff --git a/source/demyo-web/src/main/java/org/demyo/web/config/WebConfig.java b/source/demyo-web/src/main/java/org/demyo/web/config/WebConfig.java index aa7976d0..5fe9dfdc 100644 --- a/source/demyo-web/src/main/java/org/demyo/web/config/WebConfig.java +++ b/source/demyo-web/src/main/java/org/demyo/web/config/WebConfig.java @@ -55,9 +55,7 @@ public WebConfig() { @Override public void addResourceHandlers(final ResourceHandlerRegistry registry) { - registry.addResourceHandler("/css/**").addResourceLocations("/css/", "classpath:/public/css/"); - registry.addResourceHandler("/fonts/**").addResourceLocations("/fonts/", "classpath:/public/fonts/"); - registry.addResourceHandler("/js/**").addResourceLocations("/js/", "classpath:/public/js/"); + registry.addResourceHandler("/assets/**").addResourceLocations("/assets/", "classpath:/public/assets/"); registry.addResourceHandler("/icons/**").addResourceLocations("/icons/"); registry.addResourceHandler("/favicon.ico").addResourceLocations("/favicon.ico"); } diff --git a/source/demyo-web/src/main/java/org/demyo/web/controller/HomeController.java b/source/demyo-web/src/main/java/org/demyo/web/controller/HomeController.java index b3469c54..62e812c5 100644 --- a/source/demyo-web/src/main/java/org/demyo/web/controller/HomeController.java +++ b/source/demyo-web/src/main/java/org/demyo/web/controller/HomeController.java @@ -1,5 +1,7 @@ package org.demyo.web.controller; +import java.util.ArrayList; +import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Locale; @@ -40,45 +42,14 @@ public class HomeController extends AbstractController { @Value("#{servletContext.contextPath}") private String servletContextPath; - @Value("classpath*:public/js/app.*.js") - private Resource[] appJs; - private String appJsFilename; + @Value("classpath*:public/assets/*.js") + private Resource[] allJsResources; + private String indexJsFilename; + private List otherJsFilenames; - @Value("classpath*:public/css/app.*.css") - private Resource[] appCss; - private String appCssFilename; - - @Value("classpath*:public/js/manage.*.js") - private Resource[] manageJs; - private String manageJsFilename; - - @Value("classpath*:public/css/manage.*.css") - private Resource[] manageCss; - private String manageCssFilename; - - @Value("classpath*:public/js/chunk-vendors.*.js") - private Resource[] vendorJs; - private String vendorJsFilename; - - @Value("classpath*:public/css/chunk-vendors.*.css") - private Resource[] vendorCss; - private String vendorCssFilename; - - @Value("classpath*:public/js/vendor-filepond.*.js") - private Resource[] vendorFilepondJs; - private String vendorFilepondJsFilename; - - @Value("classpath*:public/css/vendor-filepond.*.css") - private Resource[] vendorFilepondCss; - private String vendorFilepondCssFilename; - - @Value("classpath*:public/js/app-legacy.*.js") - private Resource[] appLegacyJs; - private String appLegacyJsFilename; - - @Value("classpath*:public/js/chunk-vendors-legacy.*.js") - private Resource[] vendorLegacyJs; - private String vendorLegacyJsFilename; + @Value("classpath*:public/assets/*.css") + private Resource[] allCssResources; + private List cssFilenames; private final String appVersion; private final String appCodename; @@ -90,21 +61,30 @@ public HomeController() { @PostConstruct private void init() { - // Demyo - appJsFilename = getFrontendResource(appJs, "app.*.js"); - appCssFilename = getFrontendResource(appCss, "app.*.css"); - manageJsFilename = getFrontendResource(manageJs, "manage.*.js"); - manageCssFilename = getFrontendResource(manageCss, "manage.*.css"); - - // Vendors - vendorJsFilename = getFrontendResource(vendorJs, "chunk-vendors.*.js"); - vendorCssFilename = getFrontendResource(vendorCss, "chunk-vendors.*.css"); - vendorFilepondJsFilename = getFrontendResource(vendorFilepondJs, "vendor-filepond.*.js"); - vendorFilepondCssFilename = getFrontendResource(vendorFilepondCss, "vendor-filepond.*.css"); - - // Legacy - appLegacyJsFilename = getFrontendResource(appLegacyJs, "app-legacy.*.js"); - vendorLegacyJsFilename = getFrontendResource(vendorLegacyJs, "chunk-vendors-legacy.*.js"); + Comparator indexFirstComp = (r1, r2) -> { + String name1 = r1.getFilename(); + String name2 = r2.getFilename(); + if (name1.startsWith("index")) { + return -1; + } + if (name2.startsWith("index")) { + return 1; + } + return name1.compareTo(name2); + }; + + List allJs = new ArrayList<>(List.of(allJsResources)); + allJs.sort(indexFirstComp); + indexJsFilename = allJs.get(0).getFilename(); + otherJsFilenames = allJs.subList(1, allJs.size()).stream().map(Resource::getFilename).toList(); + + List allCss = new ArrayList<>(List.of(allCssResources)); + allCss.sort(indexFirstComp); + cssFilenames = allCss.stream().map(Resource::getFilename).toList(); + + LOGGER.trace("Index JS resource: {}", indexJsFilename); + LOGGER.trace("Sorted non-index JS resources: {}", otherJsFilenames); + LOGGER.trace("Sorted CSS resources: {}", cssFilenames); } /** @@ -135,18 +115,9 @@ public String index(Model model, HttpServletRequest request, HttpServletResponse model.addAttribute(MODEL_KEY_VERSION, appVersion); model.addAttribute(MODEL_KEY_CODENAME, appCodename); - model.addAttribute("appJsFilename", appJsFilename); - model.addAttribute("appCssFilename", appCssFilename); - model.addAttribute("manageJsFilename", manageJsFilename); - model.addAttribute("manageCssFilename", manageCssFilename); - - model.addAttribute("vendorJsFilename", vendorJsFilename); - model.addAttribute("vendorCssFilename", vendorCssFilename); - model.addAttribute("vendorFilepondJsFilename", vendorFilepondJsFilename); - model.addAttribute("vendorFilepondCssFilename", vendorFilepondCssFilename); - - model.addAttribute("appLegacyJsFilename", appLegacyJsFilename); - model.addAttribute("vendorLegacyJsFilename", vendorLegacyJsFilename); + model.addAttribute("indexJsFilename", indexJsFilename); + model.addAttribute("otherJsFilenames", otherJsFilenames); + model.addAttribute("cssFilenames", cssFilenames); // The fact that this is a JSP request means that the headers and // attributes are altered. So the standard header writer attributes diff --git a/source/demyo-web/src/main/webapp/WEB-INF/jsp/index.jsp b/source/demyo-web/src/main/webapp/WEB-INF/jsp/index.jsp index 0b48ec16..ca59d774 100644 --- a/source/demyo-web/src/main/webapp/WEB-INF/jsp/index.jsp +++ b/source/demyo-web/src/main/webapp/WEB-INF/jsp/index.jsp @@ -8,46 +8,44 @@ - + Demyo - + <%-- The manifest link will be injected by the Vue app --> - + <%-- In case someone exposes it publicly by mistake --%> <%-- Don't send info to linked sites, this is supposed to be a private application --%> - + - + - + - + - - - - - - - - - - - + + <%-- Note: the nonce is required on external scripts too on Firefox. Chromium Edge doesn't seem to care. --%> + + + + + + + We're sorry but the Vue frontend to Demyo doesn't work properly without JavaScript enabled. Please enable it to continue.
- <%-- Note: the nonce is required on external scripts too on Firefox. Chromium Edge doesn't seem to care. --%> - - - - -