Как заменить текст и обновить его динамически

Нам нужно добавить отказ от ответственности или раскрытие информации к определенным сообщениям (около 100 штук, и их число растет). Текст раскрытия может измениться в будущем, поэтому я хотел бы добавить [DISCLOSURE-GOES-HERE] в каждое из 100 сообщений. Мы можем добавить его вручную, это не проблема. Но когда мы обновим текст раскрытия в будущем, я хочу изменить его только в одном месте.

Что я пробовал:

  1. Watched Words. Проблема в том, что в существующих сообщениях обновленное раскрытие не отображается, пока вы не отредактируете сообщение. Это сводит на нет цель в данном случае.

  2. JavaScript для замены innerHTML элемента. Должно быть, я сделал что-то не так — это вызвало ошибки при замене дочернего узла:

<script type="text/discourse-plugin" version="0.8">
    var disclosures = "• Важное раскрытие информации: Мы не несем ответственности и т. д. и т. д.";
    api.decorateCooked($elem => {
        var el = $elem[0];
        el.innerHTML = el.innerHTML.replace('[DISCLOSURE-GOES-HERE]', disclosures);
    });
</script>
  1. Компонент темы Auto-linkify. Отлично подходит для других задач, но я хочу отображать сам текст раскрытия, а не ссылку на него.

  2. Я знаю, что можно заменить текст через консоль Rails, но я хочу, чтобы модераторы поддерживали его.

Я делал подобные вещи на основе кода из компонента Auto Linkify Words.

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

У этого решения есть преимущество: текст не перерисовывается в каждом сообщении при каждом просмотре.

Существует текстовый подход, который также поможет здесь: сделайте сообщение о раскрытии информации «вечнозеленым» и добавьте ссылку на детали предупреждения. Вместо того чтобы…

Важные раскрытия информации: мы не несем ответственности, не являемся виновными и даже не обладаем знаниями о заявлениях в этой теме.

…лучше сделать что-то вроде:

Важные раскрытия информации: эта тема содержит контент, который может требовать дополнительного контекста, предоставленного в Списке раскрытий

Тогда основная часть ваших обновлений будет сосредоточена на одной странице, которая также может быть темой в Discourse (легко редактировать/обновлять!). :slight_smile: