zds-site icon indicating copy to clipboard operation
zds-site copied to clipboard

[WIP] Correction de la taille de l'avatar sur le nouveau profil

Open helmasaur opened this issue 5 years ago • 21 comments

L'avatar sur la nouvelle page de profil est plus grand qu'auparavant. Or, les avatars par défaut (Gravatar) n'ont pas vu leur taille changer.

helmasaur avatar Oct 06 '19 01:10 helmasaur

Coverage Status

Coverage decreased (-13.8%) to 58.799% when pulling 86618597b04bc77f80dc0bf304a5e269af660108 on Helmasaur:hotfix-avatar-profil into ded5ff94daf7eb3de2528b23a2b7715cb437849a on zestedesavoir:dev.

coveralls avatar Oct 06 '19 01:10 coveralls

~~C'était volontaire de remplir tout le bloc si l'avatar le permettait~~

EDIT : Je viens de comprendre le changement, c'est pour éviter d'avoir une image plus grande que de ce qu'on a besoin ?

A-312 avatar Oct 06 '19 06:10 A-312

C'est bien pour la page de profil mais ça risque d'allourdir le chargement des autres pages car par défaut Gravatar envoie une image en 80px, pas 200px. Je propose qu'on modifie la fonction get_avatar_url(self) pour qu'elle accepte en paramètre optionnel la taille demandée à Gravatar def get_avatar_url(self, gravatar_size=60). Par défaut je propose 60 car d'après mes recherches c'est la plus grande taille rencontrée en dehors de la page de profil, après on peut très bien laisser 80, on ne perd pas grand chose.

Situphen avatar Oct 06 '19 12:10 Situphen

(Sous Firefox le resize peut faire moche)

A-312 avatar Oct 06 '19 13:10 A-312

(Sous Firefox le resize peut faire moche)

De quel resize parles-tu ?

Situphen avatar Oct 06 '19 13:10 Situphen

80->60, par le navigateur

A-312 avatar Oct 06 '19 13:10 A-312

C'est le cas actuellement et je ne vois rien de génant, après peut-être que sur un écran haute résolution c'est différent.

Situphen avatar Oct 06 '19 13:10 Situphen

La modification que j'ai faite permet de ne pas avoir ceci : avatar-profil.

Si je dois changer la taille par défaut en ajoutant un argument, cela signifie que je dois modifier l'appelle de cette méthode pour la page du profile mais je n'ai pas la dernière version du code à jour et je ne suis pas sûr de savoir faire ça correctement. C'est bien dans templates/member/profile.html ?

helmasaur avatar Oct 06 '19 14:10 helmasaur

Actuellement, je vois trois possibilités :

  • Modifier get_avatar_url pour retourner un object/list avec toutes les tailles (un peu comme les thumbnail) ;
  • Transformer get_avatar_url en templatetag, il prendre l'userid en valeur d'entrée et la width en argument ;
  • Créer un filtre (toujours dans le dossier templatetag) qui permet d'ajouter la taille de l'image quand il détecte (via la vérification de l'url) l'utilisation d'un gravatar.

A-312 avatar Oct 07 '19 07:10 A-312

Je dirais que la solution la plus simple c'est de créer une fonction get_avatar_url_for_profile :

def get_avatar_url_for_profile(self):
    return self.get_avatar_url(self, 200)

mais c'est un peu moche et pas très souple. Donc je pense qu'on peut partir sur un filtre gravatar_size qui prend en paramètre la taille en pixel et l'ajoute à l'URL comme propose A-312. J'aime bien cette solution car elle permet de garder la taille en pixel dans le code HTML, ce qui permet de modifier le front sans toucher au back.

Situphen avatar Oct 07 '19 10:10 Situphen

La marche à suivre est expliquée ici : https://docs.djangoproject.com/fr/2.2/howto/custom-template-tags/#writing-custom-template-filters

A-312 avatar Oct 07 '19 11:10 A-312

Pourquoi ne pas garder l'idée de l'argument ?

helmasaur avatar Oct 07 '19 23:10 helmasaur

Pourquoi ne pas garder l'idée de l'argument ?

Tu implémentes une nécessité du front dans le back

A-312 avatar Oct 08 '19 10:10 A-312

Pourquoi ne pas garder l'idée de l'argument ?

On ne peut pas appeler une fonction avec des arguments depuis les gabarits (templates). On est donc obligéde créer soit une nouvelle fonction sans paramère, soit un filtre de gabarit, soit un templatetag.

Situphen avatar Oct 08 '19 15:10 Situphen

Pourquoi ne pas garder l'idée de l'argument ?

On ne peut pas appeler une fonction avec des arguments depuis les gabarits (templates). On est donc obligéde créer soit une nouvelle fonction sans paramère, soit un filtre de gabarit, soit un templatetag.

C'est techniquement possible si on le fait dans le controller (mais loin d'être adéquat)

A-312 avatar Oct 08 '19 18:10 A-312

Bonjour, avant de lancer la QA, est-ce que je peux avoir un état de cette PR ?

Notamment :

  • Est-ce qu'elle est encore en WIP (si oui, ça serait sympa de le marquer dans la PR)
  • Est-ce qu'elle est terminée (et la code review concluante) ?

firm1 avatar Oct 16 '19 07:10 firm1

@firm1 le procédé ne convient pas

A-312 avatar Oct 16 '19 07:10 A-312

Il y a un fichier particulier où je dois écrire la fonction ?

helmasaur avatar Jan 19 '20 13:01 helmasaur

Je suppose qu'il faut écrire la fonction dans un nouveau fichier dans le dossier zds/utils/templatetags

Situphen avatar Jan 19 '20 13:01 Situphen

J'ai rajouté [WIP] en attendant que ça soit QA-able, une fois fait tu pourras l'enlever :)

A-312 avatar Jan 19 '20 13:01 A-312

@Helmasaur Volontaire pour poursuivre cette PR ? :)

Situphen avatar Feb 20 '21 23:02 Situphen

Reprise par #6398 .

Arnaud-D avatar Oct 07 '22 21:10 Arnaud-D