Pourquoi l'icône ne change-t-elle pas partout ?

J’utilise ce script pour changer les icônes sur tout mon site avec succès, et cela remplace l’icône de validation « Résolu » du plugin Solved par un pouce levé.


Cependant, le changement ne s’applique pas à toutes les occurrences du site, par exemple dans la liste des notifications :

image
~
Voici à quoi cela ressemble dans d’autres endroits du site où cela fonctionne :

image

Certains icônes, notamment toutes les notifications, nécessitent un traitement spécial car nous utilisons des noms différents. Dans ce cas, vous recherchez notification.solved.accepted_notification (tous ces noms d’icônes aberrants sont répertoriés dans la section replacements à l’adresse https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse-common/lib/icon-library.js.es6)

<script type="text/discourse-plugin" version="0.8">
    api.replaceIcon('notification.solved.accepted_notification', 'thumbs-up')
</script>

Désolé de revenir sur ce sujet, mais savez-vous pourquoi l’icône ne change pas dans les contrôles de publication ?


Voici le code que j’utilise :

Essayez-vous de le modifier spécifiquement pour cet emplacement d’icône et cet état ? Si vous essayez toujours de modifier l’icône au niveau global, le code que vous avez initialement publié est toujours correct :

api.replaceIcon('far-check-square', 'thumbs-up')
api.replaceIcon('check-square', 'thumbs-up')

Cette icône de coche à côté de « Kudos » n’est pas la valeur par défaut ; auriez-vous du code conflictuel quelque part ?

Spécifiquement dans ce domaine, car comme Kris l’a mentionné précédemment, le code doit parfois être très précis. Voici tout le code que j’ai ajouté pour modifier les icônes :

Comme Kris l’a mentionné, seules certaines icônes nécessitent un traitement spécial. Les notifications en font partie, c’est pourquoi vous deviez utiliser notification.solved.accepted_notification. Dans le cas de l’icône « résolu » dans les contrôles du message, elle utilise le nom générique de l’icône ; vous ne pourrez donc la modifier globalement qu’en utilisant la méthode replaceIcon.

Si vous souhaitez être très précis, je pense que vous devrez remplacer la fonction addPostMenuButton définie dans le plugin « résolu ». Essayez ceci :

<script type="text/discourse-plugin" version="0.8"> 
  const { iconNode } = require("discourse-common/lib/icon-library");
  api.addPostMenuButton("solved", attrs => {
    const currentUser = api.getCurrentUser();
    const canAccept = attrs.can_accept_answer;
    const canUnaccept = attrs.can_unaccept_answer;
    const accepted = attrs.accepted_answer;
    const isOp = currentUser && currentUser.id === attrs.topicCreatedById;
    const position =
      !accepted && canAccept && !isOp ? "second-last-hidden" : "first";

    if (canAccept) {
      return {
        action: "acceptAnswer",
        icon: "far-check-square",
        className: "unaccepted",
        title: "solved.accept_answer",
        label: "solved.solution",
        position
      };
    } else if (canUnaccept && accepted) {
      const title = canUnaccept
        ? "solved.unaccept_answer"
        : "solved.accepted_answer";
      return {
        action: "unacceptAnswer",
        icon: "thumbs-up",          // MODIFIÉ ICI
        title,
        className: "accepted fade-out",
        position,
        label: "solved.solution"
      };
    } else if (!canAccept && accepted) {
      return {
        className: "hidden",
        disabled: "true",
        position,
        beforeButton(h) {
          return h(
            "span.accepted-text",
            {
              title: I18n.t("solved.accepted_description")
            },
            [
              h("span", iconNode("thumbs-up")),       // MODIFIÉ ICI
              h("span.accepted-label", I18n.t("solved.solution"))
            ]
          );
        }
      };
    }
  });
</script>

Cela fonctionne, mais étrangement, ce script fait en sorte que seul moi, avec le compte administrateur, puisse voir le sujet avec une réponse marquée comme résolue ; tout autre utilisateur ne peut pas le voir.

Oh bizarre ! Je ne sais pas pourquoi cela échoue uniquement pour les utilisateurs non administrateurs… Quoi qu’il en soit, j’ai mis à jour le script avec l’élément manquant.

Ce n’est plus cassé, mais le changement d’icône n’est visible que pour les administrateurs ; pour les non-administrateurs, l’icône résolue/cochée reste toujours affichée :


Administrateur :

Ah oui, le script a été mis à jour.