Почему иконка не меняется везде?

Я успешно использую этот скрипт для замены иконок на всём моём сайте, и он меняет иконку «решено» (галочку) плагина Solved на «палец вверх».


Однако это изменение не применяется во всех случаях на сайте, например, в списке уведомлений:

image
~
Вот как это выглядит в других местах сайта, где замена работает:

image

Некоторые иконки, включая все уведомления, требуют особого подхода, так как мы используем разные названия. В данном случае вам нужно найти notification.solved.accepted_notification (все имена таких исключительных иконок перечислены в разделе replacements по адресу 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>

Извините, что снова поднимаю эту тему, но не знаете ли вы, почему иконка не меняется в элементах управления публикацией?


Вот код, который я использую:

Вы пытаетесь изменить его конкретно для этого расположения и состояния иконки? Если вы всё ещё пытаетесь изменить иконку глобально, то код, который вы изначально опубликовали, остаётся верным:

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

Эта иконка галочки рядом с «Kudos» не является стандартной, поэтому возможно, у вас где-то есть конфликтующий код?

Конкретно в этой области, так как, как уже упоминал Крис, иногда код должен быть очень специфичным. Это весь код, который я добавил для изменения иконок:

Как уже упоминал Крис, только некоторые иконки требуют особого подхода. Уведомления — один из таких случаев, поэтому вам нужно было использовать notification.solved.accepted_notification. В случае с иконкой «решено» в элементах управления постом используется общее имя иконки, поэтому изменить её можно будет только глобально, используя метод replaceIcon.

Если вы хотите добиться максимальной точности, думаю, вам придётся переопределить функцию addPostMenuButton, определённую в плагине «Решено». Попробуйте следующее:

<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",          // ИЗМЕНЕНО ЗДЕСЬ
        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")),       // ИЗМЕНЕНО ЗДЕСЬ
              h("span.accepted-label", I18n.t("solved.solution"))
            ]
          );
        }
      };
    }
  });
</script>

Это работает, но странно: этот скрипт делает так, что только я с аккаунтом администратора могу видеть тему с решением, а другие пользователи не могут её увидеть.

Странно! Не совсем понятно, почему это не работает только для обычных пользователей… В любом случае, я обновил скрипт, добавив недостающий фрагмент.

Больше не сломано, однако изменение иконки отображается только для администраторов; для обычных пользователей всё ещё отображается иконка «решено/галочка»:


Администратор:

Ага, скрипт обновлён.