From 0e5d9ff1fa107268ddac18a08c23d862a28d01f9 Mon Sep 17 00:00:00 2001 From: Kenneth VanderLinde Date: Sun, 19 Nov 2023 01:42:42 -0800 Subject: [PATCH 1/2] Avoid failure when touching up asset names Instead of `cp`, using `mv` has some nicer behaviour on Windows and Mac OS, while also being decent on Linux too. Cherry pick of 4e86d6871 --- .github/workflows/publish.yml | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 93b7d3b007..846c63fd0a 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -68,11 +68,11 @@ jobs: # | |/ |/ // // / / // /_/ // /_/ /| |/ |/ /(__ ) # |__/|__//_//_/ /_/ \__,_/ \____/ |__/|__//____/ # - - name: Copy Windows Release Files + - name: Rename Windows Release Files if: matrix.os == 'windows-latest' run: | - cp releases/MapTool*.exe releases/MapTool-${{ github.event.release.tag_name }}.exe - cp releases/MapTool*.msi releases/MapTool-${{ github.event.release.tag_name }}.msi + mv releases/MapTool*.exe releases/MapTool-${{ github.event.release.tag_name }}.exe + mv releases/MapTool*.msi releases/MapTool-${{ github.event.release.tag_name }}.msi continue-on-error: true - name: Upload Windows EXE Release Asset id: upload-release-asset-exe @@ -113,12 +113,12 @@ jobs: # / /___ / // / / // /_/ /_> < # /_____//_//_/ /_/ \__,_//_/|_| # - - name: Copy Linux Release Files + - name: Rename Linux Release Files if: matrix.os == 'ubuntu-latest' run: | - cp releases/maptool*.x86_64.rpm releases/maptool-${{ github.event.release.tag_name }}.x86_64.rpm - cp releases/maptool*_amd64.deb releases/maptool_${{ github.event.release.tag_name }}_amd64.deb - cp package/archlinux/maptool/maptool-*-x86_64.pkg.tar.zst releases/maptool-${{ github.event.release.tag_name }}-x86_64.pkg.tar.zst + mv -n releases/maptool*.x86_64.rpm releases/maptool-${{ github.event.release.tag_name }}.x86_64.rpm + mv -n releases/maptool*_amd64.deb releases/maptool_${{ github.event.release.tag_name }}_amd64.deb + mv -n package/archlinux/maptool/maptool-*-x86_64.pkg.tar.zst releases/maptool-${{ github.event.release.tag_name }}-x86_64.pkg.tar.zst continue-on-error: true - name: Upload Linux RPM Release Asset id: upload-release-asset-rpm @@ -159,11 +159,11 @@ jobs: # / / / / / // /_/ // /__ / /_/ /___/ / # /_/ /_/ /_/ \__,_/ \___/ \____//____/ # - - name: Copy Mac OS Release Files + - name: Rename Mac OS Release Files if: matrix.os == 'macOS-13' run: | - cp releases/MapTool*.dmg releases/MapTool-${{ github.event.release.tag_name }}.dmg - cp releases/MapTool*.pkg releases/MapTool-${{ github.event.release.tag_name }}.pkg + mv releases/MapTool*.dmg releases/MapTool-${{ github.event.release.tag_name }}.dmg + mv releases/MapTool*.pkg releases/MapTool-${{ github.event.release.tag_name }}.pkg continue-on-error: true - name: Upload Mac DMG Release Asset id: upload-release-asset-dmg From 4564cb46e1dad1345145f157fad6f77cea7ed198 Mon Sep 17 00:00:00 2001 From: Kenneth VanderLinde Date: Wed, 29 Nov 2023 15:58:09 -0800 Subject: [PATCH 2/2] Mostly undo PRs #4259 and #4285 HTML5 event listeners are now registered as before. However, to avoid peering issues in JavaFX <22, new listeners are created each time the page is unloaded. Cherry pick of 776e07d03 --- .../ui/htmlframe/HTMLWebViewManager.java | 52 +++++++++++++++++-- 1 file changed, 49 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/rptools/maptool/client/ui/htmlframe/HTMLWebViewManager.java b/src/main/java/net/rptools/maptool/client/ui/htmlframe/HTMLWebViewManager.java index 942e473cda..837c3c620d 100644 --- a/src/main/java/net/rptools/maptool/client/ui/htmlframe/HTMLWebViewManager.java +++ b/src/main/java/net/rptools/maptool/client/ui/htmlframe/HTMLWebViewManager.java @@ -59,6 +59,7 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.w3c.dom.*; +import org.w3c.dom.events.EventListener; import org.w3c.dom.events.EventTarget; import org.w3c.dom.html.*; @@ -91,6 +92,10 @@ public class HTMLWebViewManager { /** The bridge from Javascript to Java. */ private final JavaBridge bridge; + private EventListener listenerA = this::fixHref; + + private EventListener listenerSubmit = this::getDataAndSubmit; + /** Represents a bridge from Javascript to Java. */ public class JavaBridge { @@ -159,13 +164,50 @@ public void handleAddedNode(Object object) { if (addedNode instanceof EventTarget) { EventTarget target = (EventTarget) addedNode; if (addedNode instanceof HTMLAnchorElement || addedNode instanceof HTMLAreaElement) { - target.addEventListener("click", HTMLWebViewManager.this::fixHref, true); + target.addEventListener("click", listenerA, true); } else if (target instanceof HTMLFormElement) { - target.addEventListener("submit", HTMLWebViewManager.this::getDataAndSubmit, true); + target.addEventListener("submit", listenerSubmit, true); } else if (target instanceof HTMLInputElement || target instanceof HTMLButtonElement) { - target.addEventListener("click", HTMLWebViewManager.this::getDataAndSubmit, true); + target.addEventListener("click", listenerSubmit, true); } } + + // Add listeners to the node's descendant as they don't trigger mutation observer. + NodeList nodeList; + + // Add event handlers for hyperlinks. + nodeList = addedNode.getElementsByTagName("a"); + for (int i = 0; i < nodeList.getLength(); i++) { + EventTarget node = (EventTarget) nodeList.item(i); + node.addEventListener("click", listenerA, true); + } + + // Add event handlers for hyperlinks for maps. + nodeList = addedNode.getElementsByTagName("area"); + for (int i = 0; i < nodeList.getLength(); i++) { + EventTarget node = (EventTarget) nodeList.item(i); + node.addEventListener("click", listenerA, true); + } + + // Set the "submit" handler to get the data on submission not based on buttons + nodeList = addedNode.getElementsByTagName("form"); + for (int i = 0; i < nodeList.getLength(); i++) { + EventTarget target = (EventTarget) nodeList.item(i); + target.addEventListener("submit", listenerSubmit, true); + } + + // Set the "submit" handler to get the data on submission based on input + nodeList = addedNode.getElementsByTagName("input"); + for (int i = 0; i < nodeList.getLength(); i++) { + EventTarget target = (EventTarget) nodeList.item(i); + target.addEventListener("click", listenerSubmit, true); + } + // Set the "submit" handler to get the data on submission based on button + nodeList = addedNode.getElementsByTagName("button"); + for (int i = 0; i < nodeList.getLength(); i++) { + EventTarget target = (EventTarget) nodeList.item(i); + target.addEventListener("click", listenerSubmit, true); + } } } } @@ -269,6 +311,10 @@ public void flush() { // Delete cookies java.net.CookieHandler.setDefault(new java.net.CookieManager()); + // This may look pointless, but we need new objects on JFX <22 to avoid peering issues. + listenerA = this::fixHref; + listenerSubmit = this::getDataAndSubmit; + isFlushed = true; }