Перезапись файлов .gjs — невозможно?

Здравствуйте,

после недавнего обновления один из наших компонентов перестал работать. Ранее компонент расширял кнопку встроенной цитаты, которая находилась в файле quote-button.hbs. Теперь этого файла больше нет — весь код был перемещён в файл gjs post-text-selection-toolbar.gjs. Если я пытаюсь переопределить его «старым» способом, браузер выдаёт следующее сообщение:

component-templates.js:62 [discourse/theme-48/discourse/templates/components/post-text-selection-toolbar] post-text-selection-toolbar был написан с использованием GJS, и его шаблон нельзя переопределить. Переопределение игнорируется.

Означает ли это, что этот элемент интерфейса в Discourse можно нацеливать только через определённые PluginOutlets?

  <PluginOutlet
                @name="quote-share-buttons-after"
                @connectorTagName="span"
              />

 <PluginOutlet @name="quote-button-after" @connectorTagName="div" />

Что делать, если мне нужен больший контроль над состоянием кнопок и новых элементов, которые добавляются? Мне кажется, это ограничивает функциональность.

Кто-нибудь знает, как решить эту задачу?

Привет :waving_hand:

Думаю, теперь это возможно с помощью api.renderInOutlet?

Привет @Sören_Geier — всё верно, для внесения изменений в эту часть интерфейса вам потребуется использовать плагинные слоты (plugin outlets). Плагинные слоты — это гораздо более надёжный способ расширения функционала и обеспечат лучшую совместимость при обновлениях ядра Discourse.

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

В данном случае вас может заинтересовать предложение по ссылке DEV: Add outlet and API for adding/controlling post selection buttons by keegangeorge · Pull Request #23782 · discourse/discourse · GitHub. Оно вводит «обёрточный плагинный слот» (wrapper plugin outlet), который позволит темам и плагинам полностью заменять реализацию ядра при необходимости.

Да, это альтернативный способ рендеринга содержимого в плагинные слоты. Однако это скорее вопрос стиля написания кода — по сравнению с файлами /connectors/... это не добавляет новых функций.