Js.composer.reply_placeholder применяется как к новым темам, так и к ответам

Описание проблемы

Текст js.composer.reply_placeholder, по-видимому, привязан к тексту в редакторе при создании темы, хотя он предназначен именно для ответов.

Как воспроизвести?

Это можно увидеть, сравнив изменённую версию текста-заполнителя с тем, что отображается в редакторе.

Возможные решения

Одно из решений — изменить имя заполнителя, однако нам очень хотелось бы иметь возможность настраивать заполнители для ответов и создания тем отдельно.

Зачем нужны отдельные заполнители для создания тем и ответов?

Как показано ниже, мы начали использовать следующий текст-заполнитель для новых тем. Однако такая подсказка не имеет смысла в контексте ответа.


image

Если решение этой проблемы позволит задать отдельные заполнители как для ответов, так и для создания тем, мы сможем предоставлять улучшенную контекстную подсказку (JIT) для всех пользователей (что было бы замечательно для сообществ поддержки, подобных нашему).

2 лайка

Возможно, код в этой теме вам поможет

2 лайка

:heart: Отличная находка. Быстро попробовал, и кажется, что это очень хорошо разделяет ответ и создаёт плейсхолдеры. Хотелось бы увидеть это изменение в ядре, но я очень рад использовать изменения, предложенные Джо. Спасибо за ссылку, @Moin.

4 лайка

В качестве дополнения: фрагмент кода, опубликованный Джо, не работал как ожидалось с нашей новой кнопкой создания темы. Когда пользователь создавал новую тему, находясь внутри другой темы, он получал текст для ответа.

Ниже представлен альтернативный подход, который:

  • Отображает плейсхолдер для новых тем, независимо от того, создается ли тема на странице категорий или внутри другой темы
  • Отображает отдельный плейсхолдер для ответов
<script type="text/discourse-plugin" version="0.8">
// Пользовательские плейсхолдеры
const placeHolderForReplies = `При помощи другим:

1. Опишите, в чём, по вашему мнению, заключается проблема
2. Расскажите, что, по вашему мнению, им следует сделать
3. Покажите, как это сделать (фрагменты кода, изображения и т.д.)
4. Добавьте ссылки и источники`;

const placeHolderForNewTopics = `Введите здесь.

1. Расскажите, что вы пытаетесь сделать.
2. Расскажите, что вы уже пробовали.
3. Опубликуйте логи ошибок в виде фрагментов кода.`;

// Импорт необходимых модулей
const discourseComputed = require("discourse-common/utils/decorators").default;
const currentLocale = I18n.currentLocale();
I18n.translations[currentLocale].js.composer.custom_reply_placeholder = placeHolderForReplies;
I18n.translations[currentLocale].js.composer.custom_topic_placeholder = placeHolderForNewTopics;

api.modifyClass("component:composer-editor", {
  @discourseComputed("composer.replyingToTopic", "composer.creatingTopic")
  replyPlaceholder(replyingToTopic, creatingTopic) {
    // Определяем, является ли композитор для ответа или создания новой темы
    if (creatingTopic) {
      return "composer.custom_topic_placeholder";  // Плейсхолдер для новой темы
    } else if (replyingToTopic) {
      return "composer.custom_reply_placeholder";  // Плейсхолдер для ответа
    }
    return this._super(...arguments);  // Возврат к стандартному поведению
  }
});
</script>
2 лайка

Также существует

3 лайка