diff --git a/sql/migration.sql b/sql/migration.sql index 74f8b28755ce8e9cfdfedb4f90f788d4825a3337..83d6144c921cb3e3255775bce4ad9abf11071c8a 100644 --- a/sql/migration.sql +++ b/sql/migration.sql @@ -161,7 +161,7 @@ language plpgsql; -- CREATE OR REPLACE FUNCTION upgrade20240306() RETURNS boolean AS $BODY$ BEGIN - CREATE INDEX IF NOT EXISTS "IX_dailyvalue" ON dailyvalue USING btree (date, indicator); + CREATE INDEX IF NOT EXISTS "IX_dailyvalue" ON dailyvalue (date, indicator); ALTER TABLE indicator DROP COLUMN aggregationtype; DROP TYPE AGGREGATIONTYPE; RETURN true; diff --git a/www-client/src/main/java/fr/agrometinfo/www/client/ui/map/CanvasAttributions.java b/www-client/src/main/java/fr/agrometinfo/www/client/ui/map/CanvasAttributions.java index ed0c22161cfa82ab66802597e756abe0749e6c41..694ae77c655f4f499fc75d02669e32dc89552617 100644 --- a/www-client/src/main/java/fr/agrometinfo/www/client/ui/map/CanvasAttributions.java +++ b/www-client/src/main/java/fr/agrometinfo/www/client/ui/map/CanvasAttributions.java @@ -108,7 +108,7 @@ public final class CanvasAttributions extends CanvasWidget { div.setInnerHTML(sj.toString()); final String line = div.getInnerText().trim(); final Context2d ctx = canvas.getContext2d(); - ctx.setFont("8px \"Helvetica Neue\", Helvetica, Arial, sans-serif"); + ctx.setFont("8px " + FONT_FAMILY); final TextMetrics measure = ctx.measureText(line); final double width = measure.getWidth(); ctx.setFillStyle("rgba(255, 255, 255, .8)"); 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 54ee830c20b7cae17a01722caac5e2efa86a024d..d06fe055f74ac9e80306d4f09abf1c6359cbe650 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 @@ -81,6 +81,11 @@ public final class CanvasTitle extends CanvasWidget { */ private List<ColorInterval> colorIntervals; + /** + * The application logo. + */ + private final ImageElement logoImg = Document.get().createImageElement(); + /** * Constructor. * @@ -88,6 +93,8 @@ 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"); } /** @@ -97,7 +104,7 @@ public final class CanvasTitle extends CanvasWidget { protected void draw() { final int availableWidth = getWidth() - LOGO_WIDTH - BORDER_SIZE * 2; final Context2d ctx = getCanvas().getContext2d(); - ctx.setFont("10px \"Helvetica Neue\", Helvetica, Arial, sans-serif"); + ctx.setFont("10px " + FONT_FAMILY); final List<String> lines = new ArrayList<>(); for (final String line : title) { if (line == null) { @@ -142,9 +149,7 @@ public final class CanvasTitle extends CanvasWidget { */ private void drawLogo() { final Context2d ctx = getCanvas().getContext2d(); - final ImageElement img = Document.get().createImageElement(); - img.setSrc("app/img/logo_etat-agrometinfo.svg"); - ctx.drawImage(img, // + ctx.drawImage(logoImg, // 0d + BORDER_SIZE + PADDING, // 0d + BORDER_SIZE + PADDING, // LOGO_WIDTH, // @@ -164,7 +169,7 @@ public final class CanvasTitle extends CanvasWidget { final double cellBottom = cellTop + cellHeight; final double labelTop = cellBottom + LINE_HEIGHT; final Context2d ctx = getCanvas().getContext2d(); - ctx.setFont("11px \"Helvetica Neue\", Helvetica, Arial, sans-serif"); + ctx.setFont("11px " + FONT_FAMILY); double x = PADDING; for (final ColorInterval value : colorIntervals) { final String line = NUMBER_FORMAT.format(value.getMin()); diff --git a/www-client/src/main/java/fr/agrometinfo/www/client/ui/map/CanvasWidget.java b/www-client/src/main/java/fr/agrometinfo/www/client/ui/map/CanvasWidget.java index 3d39e77e9bcb98bcd30a8dd3d55a1928e4ca798c..e56dd761911681f293685693ac5e8fdadba943a4 100644 --- a/www-client/src/main/java/fr/agrometinfo/www/client/ui/map/CanvasWidget.java +++ b/www-client/src/main/java/fr/agrometinfo/www/client/ui/map/CanvasWidget.java @@ -12,6 +12,11 @@ import ol.Map; * @author Olivier Maury */ abstract class CanvasWidget { + /** + * The same font-family as in style.css. + */ + protected static final String FONT_FAMILY = "\"Roboto\", Arial, Tahoma, sans-serif"; + /** * OpenLayers map. */ 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 1c3b17de6bfad157b7705a782a21ced155d88a97..8157450828f583668ea641eab1201dcfceb07161 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 @@ -22,10 +22,10 @@ public interface ApplicationUtils { } /** - * @return attributions for map. + * @return attributions for map and chart. */ static String getAttributions() { - return "© INRAE AgroClim - AgroMetInfo - " + ApplicationUtils.getVersion() + " (etalab-2.0)"; + return "© INRAE AgroClim − AgroMetInfo (etalab-2.0)"; } /** diff --git a/www-client/src/main/java/fr/agrometinfo/www/client/view/LayoutView.java b/www-client/src/main/java/fr/agrometinfo/www/client/view/LayoutView.java index b806d53b9591cebd0e4d36913a1c42d079072aef..6acdf6e6d3860992cb8a521dcc8595e9ffd71a25 100644 --- a/www-client/src/main/java/fr/agrometinfo/www/client/view/LayoutView.java +++ b/www-client/src/main/java/fr/agrometinfo/www/client/view/LayoutView.java @@ -377,6 +377,11 @@ implements LayoutPresenter.View, LoadingHandler { private void initRibbon() { final String version = ApplicationUtils.getVersion().replace("-SNAPSHOT", "…") + " β"; DomGlobal.document.body.append(Elements.span().css("ribbon").textContent(version).element()); + final List<DominoElement<HTMLElement>> elems = layout.getNavigationBar().getNavBarHeader() + .querySelectorAll(".navbar-brand"); + if (elems != null && !elems.isEmpty()) { + elems.get(0).appendChild(Elements.span().css("version").textContent(version)); + } } private void initTopBar() { diff --git a/www-client/src/main/resources/fr/agrometinfo/www/client/i18n/AppMessages_fr.properties b/www-client/src/main/resources/fr/agrometinfo/www/client/i18n/AppMessages_fr.properties index d68e9dc8d1963270ed2e43d74836e1283ce014a5..bda912ed97411ada124288ccf77e8be4fc0787db 100644 --- a/www-client/src/main/resources/fr/agrometinfo/www/client/i18n/AppMessages_fr.properties +++ b/www-client/src/main/resources/fr/agrometinfo/www/client/i18n/AppMessages_fr.properties @@ -3,7 +3,7 @@ averageValue = Valeur moyenne de l’indicateur {0} ({1}) en {2} sur {3} cell = Maille n°{0} chartSubtitle = {0,date,medium}. Unité : {1} comparedValue = Écart moyen de la valeur de l’indicateur {0} ({1}) en {2} sur {3} -computedOn = Calculé le {0,date,long} +computedOn = Calcul du {0,date,long} failureResponse = La communication avec le serveur a échoué : {0} failureStatusCode = Code d’état HTTP : {0} nbOfIndicatorPeriods[\=0] = Aucune période. diff --git a/www-client/src/main/resources/fr/agrometinfo/www/client/public/style.css b/www-client/src/main/resources/fr/agrometinfo/www/client/public/style.css index 10d45a26b150a95e536d31e74f36ce39d13b1762..306dadd2b0e0ca39812179c1a8876d8a37736648 100644 --- a/www-client/src/main/resources/fr/agrometinfo/www/client/public/style.css +++ b/www-client/src/main/resources/fr/agrometinfo/www/client/public/style.css @@ -182,6 +182,15 @@ details.card-details[open] > summary i { background-color: white; height: var(--logo-height); } +body > .modal-backdrop { + z-index: 5; +} +.navbar-brand > .version { + font-size: 0.5em; + padding-left: 0.5em; + position: relative; + top: 0.5em; +} .ribbon { color: white; font-size: 12px; @@ -246,10 +255,14 @@ details.card-details[open] > summary i { :root { --logo-height: 50px; } -@media screen and (max-width: 700px) { - .ribbon { - display: none; +@media screen and (max-width: 380px) { + .navbar-brand > .version { + left: 2.1em; + float: left; + top: -0.8em; } +} +@media screen and (max-width: 700px) { :root { --rightsidebar-padding: 1em; --rightsidebar-width: 90%; @@ -261,6 +274,16 @@ details.card-details[open] > summary i { --rightsidebar-width: 400px; } } +@media screen and (max-width: 800px) { + .ribbon { + display: none; + } +} +@media screen and (min-width: 800px) { + .navbar-brand > .version { + display: none; + } +} @media screen and (min-width: 1200px) { :root { --rightsidebar-padding: 1em;