From d084e71c0e4c93ed009624a09ea634066b7fd438 Mon Sep 17 00:00:00 2001
From: Olivier Maury <Olivier.Maury@inrae.fr>
Date: Wed, 31 Jul 2024 16:20:57 +0200
Subject: [PATCH 1/2] =?UTF-8?q?Changer=20le=20chargement=20du=20logo=20pou?=
 =?UTF-8?q?r=20permettre=20le=20t=C3=A9l=C3=A9chargement=20sous=20Blink=20?=
 =?UTF-8?q?et=20WebKit.=20fixes=20104?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../www/client/ui/chart/LogoPlugin.java       | 11 ++---
 .../www/client/ui/map/CanvasTitle.java        | 10 +----
 .../www/client/util/ApplicationUtils.java     | 45 +++++++++++++++++++
 3 files changed, 50 insertions(+), 16 deletions(-)

diff --git a/www-client/src/main/java/fr/agrometinfo/www/client/ui/chart/LogoPlugin.java b/www-client/src/main/java/fr/agrometinfo/www/client/ui/chart/LogoPlugin.java
index ad540cb..05ce1f1 100644
--- a/www-client/src/main/java/fr/agrometinfo/www/client/ui/chart/LogoPlugin.java
+++ b/www-client/src/main/java/fr/agrometinfo/www/client/ui/chart/LogoPlugin.java
@@ -7,9 +7,10 @@ import org.pepstock.charba.client.plugins.AbstractPlugin;
 
 import com.google.gwt.canvas.client.Canvas;
 import com.google.gwt.core.client.GWT;
-import com.google.gwt.dom.client.Document;
 import com.google.gwt.dom.client.ImageElement;
 
+import fr.agrometinfo.www.client.util.ApplicationUtils;
+
 /**
  * Append RF+AgroMetInfo logo on the chart.
  *
@@ -33,18 +34,11 @@ public final class LogoPlugin extends AbstractPlugin {
      */
     private static final double LOGO_SIZE_RATIO = 2.1087;
 
-    /**
-     * The application logo.
-     */
-    private final ImageElement logoImg = Document.get().createImageElement();
-
     /**
      * Constructor.
      */
     public LogoPlugin() {
         super("Logo");
-        // Load the image once for all
-        logoImg.setSrc("app/img/logo_etat-agrometinfo.svg");
     }
 
     @Override
@@ -56,6 +50,7 @@ public final class LogoPlugin extends AbstractPlugin {
         // Charba Canvas only accept a canvas as image
         // 1. create a GWT canvas with the logo
         final Canvas logoCanvas = Canvas.createIfSupported();
+        final ImageElement logoImg = ApplicationUtils.getApplicationLogo();
         logoCanvas.getContext2d().drawImage(logoImg, //
                 0d, //
                 0d, //
diff --git a/www-client/src/main/java/fr/agrometinfo/www/client/ui/map/CanvasTitle.java b/www-client/src/main/java/fr/agrometinfo/www/client/ui/map/CanvasTitle.java
index 9615a5c..c51ad11 100644
--- a/www-client/src/main/java/fr/agrometinfo/www/client/ui/map/CanvasTitle.java
+++ b/www-client/src/main/java/fr/agrometinfo/www/client/ui/map/CanvasTitle.java
@@ -7,11 +7,11 @@ import java.util.StringJoiner;
 import com.google.gwt.canvas.dom.client.Context2d;
 import com.google.gwt.canvas.dom.client.Context2d.TextAlign;
 import com.google.gwt.canvas.dom.client.TextMetrics;
-import com.google.gwt.dom.client.Document;
 import com.google.gwt.dom.client.ImageElement;
 import com.google.gwt.i18n.client.NumberFormat;
 
 import elemental2.dom.DomGlobal;
+import fr.agrometinfo.www.client.util.ApplicationUtils;
 import fr.agrometinfo.www.client.util.UiUtils;
 import fr.agrometinfo.www.client.util.color.ColorInterval;
 import ol.Map;
@@ -82,11 +82,6 @@ public final class CanvasTitle extends CanvasWidget {
      */
     private List<ColorInterval> colorIntervals;
 
-    /**
-     * The application logo.
-     */
-    private final ImageElement logoImg = Document.get().createImageElement();
-
     /**
      * Constructor.
      *
@@ -94,8 +89,6 @@ public final class CanvasTitle extends CanvasWidget {
      */
     public CanvasTitle(final Map map) {
         super(map);
-        // Load the image once for all
-        logoImg.setSrc("app/img/logo_etat-agrometinfo.svg");
     }
 
     /**
@@ -150,6 +143,7 @@ public final class CanvasTitle extends CanvasWidget {
      */
     private void drawLogo() {
         final Context2d ctx = getCanvas().getContext2d();
+        final ImageElement logoImg = ApplicationUtils.getApplicationLogo();
         ctx.drawImage(logoImg, //
                 0d + BORDER_SIZE + PADDING, //
                 0d + BORDER_SIZE + PADDING, //
diff --git a/www-client/src/main/java/fr/agrometinfo/www/client/util/ApplicationUtils.java b/www-client/src/main/java/fr/agrometinfo/www/client/util/ApplicationUtils.java
index b2ff87a..469f4ad 100644
--- a/www-client/src/main/java/fr/agrometinfo/www/client/util/ApplicationUtils.java
+++ b/www-client/src/main/java/fr/agrometinfo/www/client/util/ApplicationUtils.java
@@ -5,15 +5,60 @@ import java.util.HashMap;
 import java.util.Map;
 
 import com.google.gwt.core.client.GWT;
+import com.google.gwt.dom.client.Document;
+import com.google.gwt.dom.client.ImageElement;
 import com.google.gwt.i18n.client.DateTimeFormat;
 import com.google.gwt.user.client.DOM;
 
+import elemental2.dom.XMLHttpRequest;
+
 /**
  * Helper class.
  *
  * @author Olivier Maury
  */
 public final class ApplicationUtils {
+
+    /**
+     * The application logo, retrieved once.
+     */
+    private static final ImageElement LOGO_IMG = Document.get().createImageElement();
+
+    /**
+     * @param a base64-encoded string
+     * @return decoded string
+     */
+    private static native String base64decode(String a) /*-{
+        return window.atob(a);
+    }-*/;
+
+    /**
+     * @param b string to encode
+     * @return base64-encoded string
+     */
+    private static native String base64encode(String b) /*-{
+        return window.btoa(b);
+    }-*/;
+
+    /**
+     * Create and return a unique img element with SVG source, ready to export as
+     * image from map an chart.
+     *
+     * @return HTML img element with SVG source as data in src attribute.
+     */
+    public static ImageElement getApplicationLogo() {
+        if (LOGO_IMG.getSrc() == null || LOGO_IMG.getSrc().isEmpty()) {
+            final XMLHttpRequest xhr = new XMLHttpRequest();
+            xhr.onload = e -> {
+                final String resp = xhr.responseText;
+                LOGO_IMG.setSrc("data:image/svg+xml;base64," + base64encode(resp));
+            };
+            xhr.open("GET", "app/img/logo_etat-agrometinfo.svg");
+            xhr.send();
+        }
+        return LOGO_IMG;
+    }
+
     /**
      * @return root path of application.
      */
-- 
GitLab


From 0632cdbc1e8114319edf4b08b5460ecc2f84ff2b Mon Sep 17 00:00:00 2001
From: Olivier Maury <Olivier.Maury@inrae.fr>
Date: Wed, 31 Jul 2024 16:44:18 +0200
Subject: [PATCH 2/2] PMD

---
 .../fr/agrometinfo/www/client/util/ApplicationUtils.java  | 8 --------
 1 file changed, 8 deletions(-)

diff --git a/www-client/src/main/java/fr/agrometinfo/www/client/util/ApplicationUtils.java b/www-client/src/main/java/fr/agrometinfo/www/client/util/ApplicationUtils.java
index 469f4ad..6317044 100644
--- a/www-client/src/main/java/fr/agrometinfo/www/client/util/ApplicationUtils.java
+++ b/www-client/src/main/java/fr/agrometinfo/www/client/util/ApplicationUtils.java
@@ -24,14 +24,6 @@ public final class ApplicationUtils {
      */
     private static final ImageElement LOGO_IMG = Document.get().createImageElement();
 
-    /**
-     * @param a base64-encoded string
-     * @return decoded string
-     */
-    private static native String base64decode(String a) /*-{
-        return window.atob(a);
-    }-*/;
-
     /**
      * @param b string to encode
      * @return base64-encoded string
-- 
GitLab