display lists as images (#72176) #322

Merged
smihai merged 2 commits from wip/72176-option-to-display-list-as-images into main 2023-07-01 09:13:55 +02:00
Owner
No description provided.
smihai force-pushed wip/72176-option-to-display-list-as-images from 278e54f73a to a1fc1cefbe 2023-05-17 10:52:11 +02:00 Compare
smihai force-pushed wip/72176-option-to-display-list-as-images from a1fc1cefbe to c6da7d0fe8 2023-05-17 10:54:11 +02:00 Compare
smihai force-pushed wip/72176-option-to-display-list-as-images from c6da7d0fe8 to 764994815f 2023-05-17 11:14:25 +02:00 Compare
smihai force-pushed wip/72176-option-to-display-list-as-images from 764994815f to ed32df6059 2023-05-17 11:43:20 +02:00 Compare
Owner

Pourquoi avoir choisi un select ?
Utiliser une liste de boutons radios est préférable car elle permet de se passer complètement de JS et sera full accessible. HTML only.

Ensuite, je déplacerais le CSS dans un fichier dans publik-base-theme qui permet de surcharger plus simplemement si besoin et de pouvoir ajouter des vars scss de configuration.

Pourquoi avoir choisi un select ? Utiliser une liste de boutons radios est préférable car elle permet de se passer complètement de JS et sera full accessible. HTML only. Ensuite, je déplacerais le CSS dans un fichier dans publik-base-theme qui permet de surcharger plus simplemement si besoin et de pouvoir ajouter des vars scss de configuration.
smihai force-pushed wip/72176-option-to-display-list-as-images from ed32df6059 to faf23c1c16 2023-05-17 15:00:45 +02:00 Compare
smihai force-pushed wip/72176-option-to-display-list-as-images from faf23c1c16 to 130c5ffe3f 2023-05-17 16:57:03 +02:00 Compare
Owner

Pour les images, je pense que c'est mieux d'utiliser une balise image, cela évite la possible superposition avec le label et permet facilement de personnaliser la taille

Tous les champs de formulaire sont férrés à droite, je trouve bizarre que celui-là soit centré.

Il manque le focus au clavier sur les items, tu devrais pouvoir le récupérer avec

label:focus-within {
		background-color: $widget-focus-background;
		border: $widget-focus-border;
		color: $widget-focus-color;
		box-shadow: $widget-focus-box-shadow;
		outline: $widget-focus-outline;
		outline-offset: $widget-focus-outline-offset;
}

Et cela va necessité de bouger le code dans PBT et gadjo.
On dejà dans une logique de duplication de code des widget dans gadjo et PBT, je vois mal comment justifier de changer

Les items, la taille des images est trop importante sur mobile aussi.

Pour les images, je pense que c'est mieux d'utiliser une balise image, cela évite la possible superposition avec le label et permet facilement de personnaliser la taille Tous les champs de formulaire sont férrés à droite, je trouve bizarre que celui-là soit centré. Il manque le focus au clavier sur les items, tu devrais pouvoir le récupérer avec ``` label:focus-within { background-color: $widget-focus-background; border: $widget-focus-border; color: $widget-focus-color; box-shadow: $widget-focus-box-shadow; outline: $widget-focus-outline; outline-offset: $widget-focus-outline-offset; } ``` Et cela va necessité de bouger le code dans PBT et gadjo. On dejà dans une logique de duplication de code des widget dans gadjo et PBT, je vois mal comment justifier de changer Les items, la taille des images est trop importante sur mobile aussi.
fpeters reviewed 2023-05-17 20:50:26 +02:00
wcs/data.py Outdated
@ -0,0 +45,4 @@
raise TraversalError()
class DataDirectory(Directory):
Owner

Je note déjà ça parce que critique : on ne peut vraiment pas avoir un accès aux données de fiches sans contrôle d'accès.

Je note déjà ça parce que critique : on ne peut vraiment pas avoir un accès aux données de fiches sans contrôle d'accès.
Author
Owner

Je note déjà ça parce que critique : on ne peut vraiment pas avoir un accès aux données de fiches sans contrôle d'accès.

Je me suis trop emballé ici à donner accès à tous les fichiers.
Je vais me limiter à donner accès au fichier image si elle existe.

> Je note déjà ça parce que critique : on ne peut vraiment pas avoir un accès aux données de fiches sans contrôle d'accès. Je me suis trop emballé ici à donner accès à tous les fichiers. Je vais me limiter à donner accès au fichier image si elle existe.
Owner

Je reste très peu chaud; sans encore d'idée précise mais peut-être sur le mode de l'autocomplétion, création d'un jeton à la visite sur la démarche, et accès via celui-ci, pour vraiment limiter les accès.

Je reste très peu chaud; sans encore d'idée précise mais peut-être sur le mode de l'autocomplétion, création d'un jeton à la visite sur la démarche, et accès via celui-ci, pour vraiment limiter les accès.
fpeters reviewed 2023-05-17 20:52:31 +02:00
wcs/fields.py Outdated
@ -2292,2 +2293,4 @@
position_template = None
# images options
columns_number = 4
Owner

Ici un détail mais à avoir correct dès le début pour s'éviter des migrations : columns_count, ou number_of_columns, pas columns_number.

Ici un détail mais à avoir correct dès le début pour s'éviter des migrations : columns_count, ou number_of_columns, pas columns_number.
fpeters reviewed 2023-05-17 20:55:41 +02:00
@ -0,0 +16,4 @@
{% endfor %}
<style>
.buttons-with-images .content {
Owner

Évitons vraiment tant de styles inline (il faut ces styles dans les styles backoffice + dans publik-base-theme, où ils pourront être adaptés si nécessaire.

Évitons vraiment tant de styles inline (il faut ces styles dans les styles backoffice + dans publik-base-theme, où ils pourront être adaptés si nécessaire.
smihai force-pushed wip/72176-option-to-display-list-as-images from 130c5ffe3f to d9b5f17249 2023-05-25 10:34:02 +02:00 Compare
smihai force-pushed wip/72176-option-to-display-list-as-images from d9b5f17249 to 8aac9a5e16 2023-05-25 11:07:08 +02:00 Compare
smihai force-pushed wip/72176-option-to-display-list-as-images from 8aac9a5e16 to 2f13a39a8a 2023-05-31 17:46:36 +02:00 Compare
smihai force-pushed wip/72176-option-to-display-list-as-images from 2f13a39a8a to 36c67fb61c 2023-06-01 12:07:58 +02:00 Compare
tjund reviewed 2023-06-01 15:46:38 +02:00
@ -0,0 +2,4 @@
{% block widget-control %}
<style>
:root {
Owner

Pas de :root ici. Limiter le contexte de la variable à .CheckboxesWithImagesWidget

Pas de :root ici. Limiter le contexte de la variable à `.CheckboxesWithImagesWidget`
tjund reviewed 2023-06-01 15:47:12 +02:00
@ -0,0 +2,4 @@
{% block widget-control %}
<style>
:root {
Owner

Idem, ne pas utiliser :root

Idem, ne pas utiliser :root
tjund reviewed 2023-06-01 16:19:20 +02:00
@ -0,0 +16,4 @@
type="checkbox"
{% if widget.readonly %}value="yes" disabled {% else %}name="{{ option.name }}" value="yes"{% endif %}
><label for="{{ widget.get_name_for_id }}_op_{{ forloop.counter0 }}" style="max-width:{{ widget.field.image_desktop_width }}px">
{% if option.options.image_url %}<picture><img src="{{ option.options.image_url }}" title="{{ option.label }}" /></picture>{% endif %}
Owner

Pourquoi utiliser le tag ? Il ne sert à rien puisqu'on utilise pas les images adaptatives et les balises .
L'image doit avoir une balise alt vide pour indiquer qu'elle n'est que "décorative"

Pourquoi utiliser le tag <picture >? Il ne sert à rien puisqu'on utilise pas les images adaptatives et les balises <source>. L'image doit avoir une balise alt vide pour indiquer qu'elle n'est que "décorative"
tjund reviewed 2023-06-01 16:36:38 +02:00
@ -629,0 +635,4 @@
label {
margin-bottom: 5px;
padding: 10px;
max-width: calc(var(--image-desktop-width) - 20px);
Owner
  • SI tu utilises max-width avec des images à taille variable ça passe pas
* SI tu utilises max-width avec des images à taille variable ça passe pas
Owner

(Je n'arrive pas à insérer ici un image, je la mets en commenaire plus bas)

(Je n'arrive pas à insérer ici un image, je la mets en commenaire plus bas)
Author
Owner

Branche à jour la nouvelle structure HTML et feuille de style pour assurer au maximum l'accessibilité. @tjund je veux bien ton oeil pour vérifier que je n'ai rien zappé.

Branche à jour la nouvelle structure HTML et feuille de style pour assurer au maximum l'accessibilité. @tjund je veux bien ton oeil pour vérifier que je n'ai rien zappé.
Owner

Choix d'images de tailles différentes

Choix d'images de tailles différentes
Owner

Les images débordent aussi lorsqu'elles sont trop grandes (elles ne sont pas responsive par défaut dans gadjo)
Et je trouve bizarre ce box-shadow utilisé pour indiquer l'élément selectionné, ça sort de nul part (je veux bien regarder une alternative).

Les images débordent aussi lorsqu'elles sont trop grandes (elles ne sont pas responsive par défaut dans gadjo) Et je trouve bizarre ce box-shadow utilisé pour indiquer l'élément selectionné, ça sort de nul part (je veux bien regarder une alternative).
smihai force-pushed wip/72176-option-to-display-list-as-images from 36c67fb61c to 290e62420e 2023-06-07 17:19:23 +02:00 Compare
tjund requested review from tjund 2023-06-07 17:25:38 +02:00
smihai force-pushed wip/72176-option-to-display-list-as-images from 290e62420e to 1c3a840fdc 2023-06-12 15:04:14 +02:00 Compare
fpeters requested changes 2023-06-12 15:37:00 +02:00
wcs/carddata.py Outdated
@ -114,0 +120,4 @@
def get_file_url(self, file_digest):
context = {'carddef_slug': self.formdef.url_name, 'data_id': self.id, 'file_digest': file_digest}
token = get_session().create_autocomplete_token(context)
Owner

Il faudrait un nom approprié pour cette méthode, même si c'est la même infra de token qui est utilisée derrière.

Il faudrait un nom approprié pour cette méthode, même si c'est la même infra de token qui est utilisée derrière.
wcs/carddata.py Outdated
@ -114,0 +121,4 @@
def get_file_url(self, file_digest):
context = {'carddef_slug': self.formdef.url_name, 'data_id': self.id, 'file_digest': file_digest}
token = get_session().create_autocomplete_token(context)
return "/api/file/%s" % token.id
Owner

Et quelque chose de moins générique comme chemin, type /api/card-file-token/, peut-être.

Et quelque chose de moins générique comme chemin, type /api/card-file-token/, peut-être.
@ -250,3 +251,2 @@
def get_items(data_source, include_disabled=False, mode=None):
structured_items = get_structured_items(data_source, mode=mode, include_disabled=include_disabled)
def get_tuppled_items(structured_items):
tupled_items = []
Owner

Mauvais nom de méthode (cf dessous il y a un seul p), mais surtout tu peux dire deux mots sur pourquoi cette découpe supplémentaire ?

Mauvais nom de méthode (cf dessous il y a un seul p), mais surtout tu peux dire deux mots sur pourquoi cette découpe supplémentaire ?
Author
Owner

Mauvais nom de méthode (cf dessous il y a un seul p), mais surtout tu peux dire deux mots sur pourquoi cette découpe supplémentaire ?

En effet, typo dans le nom de la méthode.

L'idée de la découpe est d'avoir une méthode (get_structured_carddef_items) pour passer un paramètre qui permet d'avoir l'url de l'image à la source de données des fiches.

Et get_tupled_items remplace get_items pour le formattage: id, text, etc.

> Mauvais nom de méthode (cf dessous il y a un seul p), mais surtout tu peux dire deux mots sur pourquoi cette découpe supplémentaire ? En effet, typo dans le nom de la méthode. L'idée de la découpe est d'avoir une méthode (`get_structured_carddef_items`) pour passer un paramètre qui permet d'avoir l'url de l'image à la source de données des fiches. Et `get_tupled_items` remplace `get_items` pour le formattage: `id`, `text`, etc.
wcs/fields.py Outdated
@ -2571,0 +2588,4 @@
'image_desktop_size',
title=_('Image size on desktop'),
value=self.image_desktop_size,
validation_function=ComputedExpressionWidget.validate_template,
Owner

Cette validation est sans doute un copié/collé excessif.

Cette validation est sans doute un copié/collé excessif.
wcs/fields.py Outdated
@ -2700,1 +2743,4 @@
# images options
image_desktop_size = 150
image_mobile_size = 75
Owner

Il y a un mixin partagé entre ItemField et ItemsField, pourquoi ne pas y ajouter ce code commun ? (ou comme pour le partage entre MapField et ItemField, un nouveau mixin dédié pour ces options ?)

Il y a un mixin partagé entre ItemField et ItemsField, pourquoi ne pas y ajouter ce code commun ? (ou comme pour le partage entre MapField et ItemField, un nouveau mixin dédié pour ces options ?)
smihai force-pushed wip/72176-option-to-display-list-as-images from 1c3a840fdc to 236ccd29fa 2023-06-13 15:21:20 +02:00 Compare
smihai force-pushed wip/72176-option-to-display-list-as-images from 236ccd29fa to b72981a19f 2023-06-13 15:40:02 +02:00 Compare
tjund requested changes 2023-06-13 17:33:58 +02:00
@ -0,0 +29,4 @@
&--picture {
margin-bottom: 5px;
grid-area: picture;
align-items: end;
Owner

align-items ne marche que sur container grid, donc inutile ici.

align-items ne marche que sur container grid, donc inutile ici.
@ -0,0 +39,4 @@
}
&--input {
grid-area: input;
align-items: baseline;
Owner

align-items ne marche que sur container grid, donc inutile ici.

.item-with-image--input n'existe pas sur .RadiobuttonsWithImagesWidget

align-items ne marche que sur container grid, donc inutile ici. .item-with-image--input n'existe pas sur .RadiobuttonsWithImagesWidget
Owner

Les CSS s'appliquent depuis la saisie en BO, mais pas depuis la fabrique de formulaire.

Les CSS s'appliquent depuis la saisie en BO, mais pas depuis la fabrique de formulaire.
Owner

Et point de détail, ou pas, je préfère une cohérence dans le nom des fichier :

  • list-with-images.html
  • list-with-images.scss
  • list-multiple-with-images.html

Et question peut-être naive : c'est necessaire d'avoir 2 templates html à 99% identique ?

Et point de détail, ou pas, je préfère une cohérence dans le nom des fichier : * list-with-images.html * list-with-images.scss * list-multiple-with-images.html Et question peut-être naive : c'est necessaire d'avoir 2 templates html à 99% identique ?
smihai force-pushed wip/72176-option-to-display-list-as-images from b72981a19f to 306ae6b61e 2023-06-20 10:15:16 +02:00 Compare
Author
Owner

Les CSS s'appliquent depuis la saisie en BO, mais pas depuis la fabrique de formulaire.

Je viens de rebaser la branche sur master pour avoir #78730 qui corrige ce souci.

> Les CSS s'appliquent depuis la saisie en BO, mais pas depuis la fabrique de formulaire. Je viens de rebaser la branche sur master pour avoir #78730 qui corrige ce souci.
Author
Owner

Et point de détail, ou pas, je préfère une cohérence dans le nom des fichier :

  • list-with-images.html
  • list-with-images.scss
  • list-multiple-with-images.html

Et question peut-être naive : c'est necessaire d'avoir 2 templates html à 99% identique ?

Le diable est dans les détails: pour les boutons radio on a

<input name="{{ widget.name }}" value="{{ option.value }}" ...

et

{% if option.image_url %}

pour les checkbox:

<input name="{{ option.name }}" value="yes" ...

et

{% if option.options.image_url %}

Partir sur un include ou autre ne réduira pas le nombre de fichiers.

> Et point de détail, ou pas, je préfère une cohérence dans le nom des fichier : > > * list-with-images.html > * list-with-images.scss > * list-multiple-with-images.html > > Et question peut-être naive : c'est necessaire d'avoir 2 templates html à 99% identique ? Le diable est dans les détails: pour les boutons radio on a ``` <input name="{{ widget.name }}" value="{{ option.value }}" ... ``` et ``` {% if option.image_url %} ``` pour les checkbox: ``` <input name="{{ option.name }}" value="yes" ... ``` et ``` {% if option.options.image_url %} ``` Partir sur un `include` ou autre ne réduira pas le nombre de fichiers.
smihai force-pushed wip/72176-option-to-display-list-as-images from 306ae6b61e to bbde0f1b24 2023-06-23 11:56:06 +02:00 Compare
smihai requested review from tjund 2023-06-26 09:29:02 +02:00
smihai changed title from WIP: display lists as images (#72176) to display lists as images (#72176) 2023-06-26 09:29:14 +02:00
smihai requested review from fpeters 2023-06-26 09:29:18 +02:00
fpeters requested changes 2023-06-26 09:50:07 +02:00
wcs/api.py Outdated
@ -431,0 +431,4 @@
class CardFileByTokenDirectory(Directory):
def _q_lookup(self, component):
get_request().ignore_session = True
context = get_session().get_autocomplete_token(component).data
Owner

Il faudrait un nom approprié pour cette méthode, même si c'est la même infra de token qui est utilisée derrière.

Il faudrait un nom approprié pour cette méthode, même si c'est la même infra de token qui est utilisée derrière.
Author
Owner

Il faudrait un nom approprié pour cette méthode, même si c'est la même infra de token qui est utilisée derrière.

Je me suis embourbé à appeler get_autocomplete_token alors que get_by_magictoken existe déjà.

> Il faudrait un nom approprié pour cette méthode, même si c'est la même infra de token qui est utilisée derrière. Je me suis embourbé à appeler `get_autocomplete_token` alors que `get_by_magictoken` existe déjà.
wcs/carddef.py Outdated
@ -307,0 +310,4 @@
def has_image_field(self):
for f in self.fields:
if not f.key == 'file' or f.varname != 'image':
continue
Owner

Je trouve cette combinaison avec le not == et le != est peu lisible; pour moi ça serait plus lisible d'exprimer ce qui est souhaité,

if f.key == 'file' and f.varname == 'image':
    return True
Je trouve cette combinaison avec le not == et le != est peu lisible; pour moi ça serait plus lisible d'exprimer ce qui est souhaité, ``` if f.key == 'file' and f.varname == 'image': return True ````
Author
Owner

Je trouve cette combinaison avec le not == et le != est peu lisible; pour moi ça serait plus lisible d'exprimer ce qui est souhaité,

if f.key == 'file' and f.varname == 'image':
    return True

T'as raison. C'est corrigé.

> Je trouve cette combinaison avec le not == et le != est peu lisible; pour moi ça serait plus lisible d'exprimer ce qui est souhaité, > > ``` > if f.key == 'file' and f.varname == 'image': > return True > ```` T'as raison. C'est corrigé.
smihai force-pushed wip/72176-option-to-display-list-as-images from bbde0f1b24 to c165fb3b84 2023-06-26 10:10:37 +02:00 Compare
smihai requested review from fpeters 2023-06-26 10:33:15 +02:00
tjund reviewed 2023-06-27 18:06:19 +02:00
@ -0,0 +14,4 @@
}
.item-with-image {
margin-bottom: 5px;
Owner

margin-bottom devenu inutile parceque display grid

margin-bottom devenu inutile parceque display grid
Author
Owner

Merci, c'est retiré.

Merci, c'est retiré.
smihai marked this conversation as resolved
Owner

À part ma dernière demande concernant le margin à supprimer, c'est ok pour moi

À part ma dernière demande concernant le margin à supprimer, c'est ok pour moi
smihai force-pushed wip/72176-option-to-display-list-as-images from c165fb3b84 to dc9d6f2ab1 2023-06-27 18:12:57 +02:00 Compare
smihai force-pushed wip/72176-option-to-display-list-as-images from dc9d6f2ab1 to 0b7861fad9 2023-06-27 18:34:41 +02:00 Compare
Author
Owner

Vu avec @tjund par jabber: on va passer les tailles de l'image en attribut de la balise du widget pour avoir un code HTML valide.

Vu avec @tjund par jabber: on va passer les tailles de l'image en attribut de la balise du widget pour avoir un code HTML valide.
smihai removed review request for tjund 2023-06-27 18:37:27 +02:00
tjund requested review from tjund 2023-06-27 18:39:24 +02:00
tjund approved these changes 2023-06-27 18:39:36 +02:00
smihai force-pushed wip/72176-option-to-display-list-as-images from 0b7861fad9 to c877f090d4 2023-06-27 18:53:46 +02:00 Compare
fpeters requested changes 2023-06-30 11:00:22 +02:00
@ -0,0 +8,4 @@
--image-size: var(--image-desktop-size);
}
&:focus-within {
outline: 1px dashed var(--primary-color);
Owner

D'où arrive var(--primary-color) ? Il manque un ticket côté publik-base-theme ?

D'où arrive `var(--primary-color)` ? Il manque un ticket côté publik-base-theme ?
Author
Owner

On s'est basé sur le rendu en backoffice où la variable --primary-color est déjà disponible.

Et quand ça sera disponible côté front le widget gagnera automatiquement le focus.

On s'est basé sur le rendu en backoffice où la variable `--primary-color` est déjà disponible. Et quand ça sera disponible côté front le widget gagnera automatiquement le focus.
Owner

Et quand ça sera disponible côté front le widget gagnera automatiquement le focus.

Ça demande a minima qu'un ticket soit créé, ça ne va pas arriver tout seul.

Et quel est donc le comportement actuel en front, pas de focus du tout (= problème d'accessibilité) ou un focus d'une mauvaise couleur ?

> Et quand ça sera disponible côté front le widget gagnera automatiquement le focus. Ça demande a minima qu'un ticket soit créé, ça ne va pas arriver tout seul. Et quel est donc le comportement actuel en front, pas de focus du tout (= problème d'accessibilité) ou un focus d'une mauvaise couleur ?
Author
Owner

Et quel est donc le comportement actuel en front, pas de focus du tout (= problème d'accessibilité) ou un focus d'une mauvaise couleur ?

Pas de focus du tout. J'ai rajouté un fallback vers un gri clair mais il faudrait le gérer côté publik-base-theme pour utiliser plutôt $widget-focus-outline. Je fais le ticket.

> Et quel est donc le comportement actuel en front, pas de focus du tout (= problème d'accessibilité) ou un focus d'une mauvaise couleur ? Pas de focus du tout. J'ai rajouté un fallback vers un gri clair mais il faudrait le gérer côté publik-base-theme pour utiliser plutôt `$widget-focus-outline`. Je fais le ticket.
@ -0,0 +17,4 @@
{% endfor %}
{% endblock %}
Owner

(ligne blanche perdue)

(ligne blanche perdue)
@ -0,0 +2,4 @@
{% block widget-attrs %}
{{ block.super }}
style="--image-desktop-size: {{ widget.field.image_desktop_size }}px;--image-mobile-size: {{ widget.field.image_mobile_size }}px;"
Owner

Ça va clasher avec le cas où le champ est conditionné/caché, qui ajoute déjà un

       {% if widget.is_hidden %}style="display: none"{% endif %}

(pareil pour le cas checkboxes)

Ça va clasher avec le cas où le champ est conditionné/caché, qui ajoute déjà un ``` {% if widget.is_hidden %}style="display: none"{% endif %} ``` (pareil pour le cas checkboxes)
Author
Owner

Ici je ne vois pas d'autres options que de revenir à la declaration CSS dans le template du widget:

<style>
.{{ widget.class_name }}[data-widget-name="{{ widget.name }}"] {
   --image-desktop-size: ...;
   --image-mobile-size: ...;
}
</style>
Ici je ne vois pas d'autres options que de revenir à la declaration CSS dans le template du widget: ``` <style> .{{ widget.class_name }}[data-widget-name="{{ widget.name }}"] { --image-desktop-size: ...; --image-mobile-size: ...; } </style> ```
Owner

J'aurais dû l'écrire, je pensais plutôt qu'on pourrait introduire un {% block widget-style-attribute %} et dedans alors il y aurait la gestion du cas champ caché, et dans le gabarit des images ça serait récupérer via block.super.

J'aurais dû l'écrire, je pensais plutôt qu'on pourrait introduire un `{% block widget-style-attribute %}` et dedans alors il y aurait la gestion du cas champ caché, et dans le gabarit des images ça serait récupérer via block.super.
Author
Owner

J'y ai pensé aussi, mais j'hésitais à toucher au template des widgets.
Je le fais.

J'y ai pensé aussi, mais j'hésitais à toucher au template des widgets. Je le fais.
smihai force-pushed wip/72176-option-to-display-list-as-images from c877f090d4 to 5dae8c62cf 2023-06-30 12:02:41 +02:00 Compare
smihai force-pushed wip/72176-option-to-display-list-as-images from 5dae8c62cf to 991fca2bf6 2023-06-30 14:06:39 +02:00 Compare
smihai force-pushed wip/72176-option-to-display-list-as-images from 991fca2bf6 to 0912aa68f9 2023-06-30 17:14:47 +02:00 Compare
smihai force-pushed wip/72176-option-to-display-list-as-images from 0912aa68f9 to db0a6c656f 2023-06-30 17:41:09 +02:00 Compare
smihai requested review from fpeters 2023-06-30 17:48:15 +02:00
fpeters approved these changes 2023-07-01 08:51:23 +02:00
smihai merged commit e9bea63586 into main 2023-07-01 09:13:55 +02:00
smihai deleted branch wip/72176-option-to-display-list-as-images 2023-07-01 09:13:55 +02:00
Sign in to join this conversation.
No reviewers
No Label
No Milestone
No Assignees
3 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: entrouvert/wcs#322
No description provided.